<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ACRL TechConnect Blog</title>
	<atom:link href="http://acrl.ala.org/techconnect/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://acrl.ala.org/techconnect</link>
	<description></description>
	<lastBuildDate>Mon, 20 May 2013 15:00:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Coding &amp; Collaboration on GitHub</title>
		<link>http://acrl.ala.org/techconnect/?p=3371</link>
		<comments>http://acrl.ala.org/techconnect/?p=3371#comments</comments>
		<pubDate>Mon, 20 May 2013 15:00:35 +0000</pubDate>
		<dc:creator>Eric Phetteplace</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3371</guid>
		<description><![CDATA[Previously on Tech Connect we wrote about the Git version control system, walking you through &#8220;cloning&#8221; a project onto to your computer, making some small changes, and committing them to the project&#8217;s history. But that post concluded on a sad note: all we could do was work by ourselves, fiddling with Git on our own [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://acrl.ala.org/techconnect/?p=3062">Previously on Tech Connect</a> we wrote about the Git version control system, walking you through &#8220;cloning&#8221; a project onto to your computer, making some small changes, and committing them to the project&#8217;s history. But that post concluded on a sad note: all we could do was work by ourselves, fiddling with Git on our own computer and gaining nothing from the software&#8217;s ability to manage multiple contributors. Well, here we will return to Git to specifically cover GitHub, one of the most popular code-sharing websites around.</p>
<h4 id="git-vs-github">Git vs. GitHub</h4>
<p>Git is open source version control software. You don&#8217;t need to rely on any third-party service to use it and you can benefit from many of its features even if you&#8217;re working on your own.</p>
<p>GitHub, on the other hand, is a company that hosts Git repositories on their website. If you allow your code to be publicly viewable, then you can host your repository for free. If you want to have a private repository, then you have to pay for a <a href="https://github.com/plans">subscription</a>.</p>
<p>GitHub layers some unique features on top of Git. There&#8217;s an <a href="https://github.com/blog/831-issues-2-0-the-next-generation">Issues queue</a> where bug reports and feature requests can be tracked and assigned to contributors. Every project has a Graphs section where interesting information, such as number of lines added and deleted over time, is charted (see <a href="https://github.com/jquery/jquery/graphs/">the graphs for jQuery</a>, for instance). You can create <a href="http://gist.github.com/">gists</a> which are mini-repositories, great for sharing or storing snippets of useful code. There&#8217;s even a Wiki feature where a project can publish editable documentation and examples. All of these nice features build upon, but ultimately have little to do with, Git.</p>
<h4 id="collaboration">Collaboration</h4>
<p>GitHub is so successful because of how well it facilitates collaboration. Hosted version control repositories are nothing new; <a href="https://sourceforge.net/">SourceForge</a> has been doing this since 1999, almost a decade prior to GitHub&#8217;s founding in 2008. But something about GitHub has struck a chord and it&#8217;s taken off like wildfire. Depending on how you count, it&#8217;s the most popular collection of open source code, over SourceForge and Google Code.<a id="note1" href="#fn1">[1]</a> <a href="http://bits.blogs.nytimes.com/2012/12/28/github-has-big-dreams-for-open-source-software-and-more/">The New York Times</a> profiled co-founder Tom Preston-Werner. It&#8217;s inspired spin-offs, like <a href="https://www.pixelapse.com/">Pixelapse</a> which has been called &#8220;GitHub for Photoshop&#8221; and <a href="http://www.docracy.com/">Docracy</a> which TechCrunch called &#8220;<a href="techcrunch.com/2011/05/22/hackathon-winner-docracy-is-a-github-for-legal-documents/">GitHub for legal documents</a>.&#8221; In fact, just like the phrase &#8220;It&#8217;s Facebook for {{insert obscure user group}}&#8221; became a common descriptor for up-and-coming social networks, &#8220;It&#8217;s GitHub for {{insert non-code document}}&#8221; <a href="https://twitter.com/search/realtime?q=%22it%27s%20github%20for%22&amp;src=typd">has become commonplace</a>. There are many inventive projects which use GitHub as more than just a collection of code (more on this later).</p>
<p>Perhaps GitHub&#8217;s popularity is due to Git&#8217;s own popularity, though similar sites host Git repositories too.<a id="note2" href="#fn2">[2]</a> Perhaps the GitHub website simply implements better features than its competitors. Whatever the reason, it&#8217;s certain that GitHub does a marvelous job of allowing multiple people to manage and work on a project.</p>
<h4 id="fork-it-bop-it-pull-it">Fork It, Bop It, Pull It</h4>
<p>Let&#8217;s focus two nice features of GitHub—<a href="https://help.github.com/articles/fork-a-repo">Forking</a> and the <a href="https://help.github.com/articles/using-pull-requests">Pull Request</a> <a id="note3" href="#fn3">[3]</a>—to see exactly why GitHub is so great for collaboration.</p>
<p>If you recall our prior post on Git, we cloned a public repository from GitHub and made some minor changes. Then, when reviewing the results of <code>git log</code>, we could see that our changes were present in the project&#8217;s history. That&#8217;s great, but how would we go about getting our changes back into the original project?</p>
<p>For the actual step-by-step process, see the LibCodeYear GitHub Project&#8217;s <a href="https://github.com/LibraryCodeYearIG/Codeyear-IG-Github-Project/tree/master/Getting%20Started">instructions</a>. There are basically only two changes from our previous process, one at the very beginning and one at the end.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-fork-btn.png"><img class="alignright  wp-image-3375" style="border: 0; padding: 0;" alt="GItHub's Fork Button" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-fork-btn.png" width="70" height="27" /></a></p>
<p>First, start by <strong>forking</strong> the repository you want to work on. To do so, set up a GitHub account, sign in, visit the repository, and click the <strong>Fork</strong> button in the upper right. After a pretty sweet animation of a book being scanned, a new project (identical to the original in both name and files) will appear on your GitHub account. You can then clone this forked repository onto your local computer by running <code>git clone</code> on the command line and supplying the URL listed on GitHub.</p>
<p>Now you can do your editing. This part is the same as using Git without GitHub. As you change files and commit changes to the repository, the history of your cloned version and the one on your GitHub account diverge. By running <code>git push</code> you &#8220;push&#8221; your local changes up to GitHub&#8217;s remote server. Git will prompt you for your GitHub password, which can get annoying after a while so you may want to <a href="https://help.github.com/articles/generating-ssh-keys">set up an SSH key on GitHub</a> so that you don&#8217;t need to type it in each time. Once you&#8217;ve pushed, if you visit the repository on GitHub and click the &#8220;commits&#8221; tab right above the file browser, you can see that your local changes have been published to GitHub. However, they&#8217;re still not in the original repository, which is underneath someone else&#8217;s account. How do you add your changes to the original account?</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-pr-btn.png"><img class="alignright  wp-image-3376" style="border: 0; padding: 0;" alt="GitHub's Pull Request Button" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-pr-btn.png" width="107" height="27" /></a></p>
<p>In your forked repository on GitHub, something is different: there&#8217;s a <strong>Pull Request</strong> button in the same upper right area where the <strong>Fork</strong> one is. Click that button to initiate a pull request. After you click it, you can choose which branches on <em>your</em> GitHub repository to push to <em>the original</em> GitHub repository, as well as write a note explaining your changes. When you submit the request, a message is sent to the project&#8217;s owners. Part of the beauty of GitHub is in how pull requests are implemented. When you send one, an issue is automatically opened in the receiving project&#8217;s Issues queue. Any GitHub account can comment on public pull requests, connecting them to open issues (e.g. &#8220;this fixes bug #43&#8243;) or calling upon other contributors to review the request. Then, when the request is approved, its changes are merged into the original repository.</p>
<p style="text-align: center;"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/GitHub-Diagram.png"><img class="aligncenter  wp-image-3389" style="border: 0; background: #fff;" alt="diagram of forking &amp; pulling on GitHub" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/GitHub-Diagram.png" width="528" height="417" /></a></p>
<p>&#8220;Pull Request&#8221; might seem like a strange term. &#8220;Push&#8221; is the name of the command that takes commits from your local computer and adds them to some remote server, such as your GitHub account. So shouldn&#8217;t it be called a &#8220;push request&#8221; since you&#8217;re essentially pushing from your GitHub account to another one? Think of it this way: you are <em>requesting</em> that your changes be <em>pulled</em> (e.g. the <code>git pull</code> command) into the original project. Honestly, &#8220;push request&#8221; might be just as descriptive, but for whatever reason GitHub went with &#8220;pull request.&#8221;</p>
<h4 id="github-applications">GitHub Applications</h4>
<p>While hopefully we&#8217;ve convinced you that <a href="http://acrl.ala.org/techconnect/?p=3248">the command line is a fine way to do things</a>, GitHub also offers Mac and Windows applications. These apps are well-designed and turn the entire process of creating and publishing a Git repository into a point-and-click affair. For instance, here is the fork-edit-pull request workflow from earlier except done entirely through a GitHub app:</p>
<ul>
<li>Visit the original repository&#8217;s page, click Fork</li>
<li>On your repository&#8217;s page, select &#8220;Clone in Mac&#8221; or &#8220;Clone in Windows&#8221; depending on which OS you&#8217;re using. The repository will be cloned onto your computer</li>
<li>Make your changes and then, when you&#8217;re ready to commit, open up the GitHub app, selecting the repository from the list of your local ones</li>
<li>Type in a commit message and press <strong>Commit</strong><br />
<a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-commit-msg1.png"><img class="aligncenter  wp-image-3390" alt="writing a commit message in GitHub for Windows" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-commit-msg1.png" width="528" height="163" /></a></li>
<li>To sync changes with GitHub, click <strong>Sync</strong></li>
<li>Return to the repository on GitHub, where you can click the <strong>Pull Request</strong> button and continue from there</li>
</ul>
<p>GitHub without the command line, amazing! You can even work with local Git repositories, using the app to do commits and view previous changes, without ever pushing to GitHub. This is particularly useful on Windows, where installing Git can have a few more hurdles. Since the GitHub for Windows app comes bundled with Git, a simple installation and login can get you up-and-running. The apps also make the process of pushing a local repository to GitHub incredibly easy, whereas <a href="https://help.github.com/articles/create-a-repo">there are a few steps</a> otherwise. The apps&#8217; visual display of &#8220;diffs&#8221; (differences in a file between versions, with added and deleted lines highlighted) and handy shortcuts to revert to particular commits can appeal even to those of us that love the command line.</p>
<p style="text-align: center;"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-commits-diff1.png"><img class="aligncenter  wp-image-3391" alt="viewing a diff in GitHub for Windows" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/github-commits-diff1.png" width="572" height="185" /></a></p>
<h4 id="more-than-code">More than Code</h4>
<p>In my previous post on Git, I noted that version control has applications far beyond coding. GitHub hosts a number of inventive projects that demonstrate this.</p>
<ul>
<li>The Code4Lib community hosts an <a href="https://github.com/code4lib/antiharassment-policy">Antiharassment Policy</a> on GitHub. Those in support can simply fork the repository and add their name to a text file, while the policy&#8217;s entire revision history is present online as well</li>
<li>The city of Philadelphia experimented with <a href="http://civic.io/2013/03/27/experiments-in-github-based-procurement/">using GitHub for procurements</a> with successful results</li>
<li><a href="https://chronicle.com/blogs/profhacker/">ProfHacker</a> just wrapped up <a href="https://chronicle.com/blogs/profhacker/tag/github101">a series on GitHub</a>, ending by discussing what it would mean to &#8220;<a href="https://chronicle.com/blogs/profhacker/fork-the-academy/48935">fork the academy</a>&#8221; and combine scholarly publishing with forking and pull requests</li>
<li>The Jekyll static-site generator makes it possible to <a href="http://jekyllbootstrap.com/">generate a blog on GitHub</a></li>
<li>The <a href="http://mxcl.github.io/homebrew/">Homebrew</a> package manager for Mac makes extensive use of Git to manage the various formulae for its software packages. For instance, if you want to roll back to a previous version of an installed package, you run <code>brew versions $PACKAGE</code> where $PACKAGE is the name of the package. That command prints a list of Git commits associated with older versions of the package, so you can enter the Homebrew repository and run a Git command like <code>git checkout 0476235 /usr/local/Library/Formula/gettext.rb</code> to get the installation formula for version 0.17 of the gettext package.</li>
</ul>
<p>These wonderful examples aside, GitHub is not a magic panacea for coding, collaboration, or any of the problems facing libraries. GitHub can be an impediment to those who are intimidated or simply not sold on the value of learning what&#8217;s traditionally been a software development tool. On the Code4Lib listserv, it was noted that the small number of signatories on the Antiharassment Policy might actually be due to its being hosted on GitHub. I struggle to sell people on my campus of the value of Google Docs with its collaborative editing features. So, as much as I&#8217;d like the Strategic Plan the college is producing to be on GitHub where everyone could submit pull requests and comment on commits, it&#8217;s not necessarily the best platform. It is important, however, not to think of it as limited purely to versioning code written by professional developers. GitHub has uses for amateurs and non-coders alike.</p>
<h4 id="footnotes">Footnotes</h4>
<p><span id="fn1">[1]</span><a href="#note1">^</a> <a href="http://readwrite.com/2011/06/02/github-has-passed-sourceforge">GitHub Has Passed SourceForge</a>, (June 2, 2011), ReadWrite.</p>
<p><span id="fn2">[2]</span><a href="#note2">^</a> Previously-mentioned SourceForge also supports Git, as does <a href="https://bitbucket.org/">Bitbucket</a>.</p>
<p><span id="fn3">[3]</span><a href="#note3">^</a> I think this would make an excellent band name, by the way.</p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3371</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking a trek with SCVNGR: Developing asynchronous, mobile orientations and instruction for campus</title>
		<link>http://acrl.ala.org/techconnect/?p=3342</link>
		<comments>http://acrl.ala.org/techconnect/?p=3342#comments</comments>
		<pubDate>Mon, 13 May 2013 13:55:02 +0000</pubDate>
		<dc:creator>Nicole Pagowsky</dc:creator>
				<category><![CDATA[academic librarianship]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[library instruction]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[gamification]]></category>
		<category><![CDATA[scnvgr]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3342</guid>
		<description><![CDATA[Embedding the library in campus-wide orientations, as well as developing standalone library orientations, is often part of outreach and first year experience work. Reaching all students can be a challenge, so finding opportunities for better engaging campus helps to promote the library and increase student awareness. Using a mobile app for orientations can provide many [...]]]></description>
				<content:encoded><![CDATA[<p>Embedding the library in campus-wide orientations, as well as developing standalone library orientations, is often part of outreach and first year experience work. Reaching all students can be a challenge, so finding opportunities for better engaging campus helps to promote the library and increase student awareness. Using a mobile app for orientations can provide many benefits such as increasing interactivity and offering an asynchronous option for students to learn about the library on their own time. We have been trying out SCVNGR at the University of Arizona (UA) Libraries and are finding it is a more fun and engaging way to deliver orientations and instruction to students.</p>
<h5><b>Why use game design for library orientations and instruction?</b></h5>
<p>Game-based learning can be a good match for orientations, just as it can be for instruction (I have explored this before with ACRL TechConnect <a href="http://acrl.ala.org/techconnect/?p=2676" target="_blank">previously</a>, looking at badges). Rather than just presenting a large amount of information to students or having them fill out a paper-based scavenger hunt activity, using something like SCVNGR can get students interacting more with the library in a way that offers more engagement in real time and with feedback. However, simply adding a layer of points and badges or other game mechanics to a non-game situation doesn&#8217;t automatically make it fun and engaging for students. In fact, doing this ineffectively can cause more harm than good (<a href="http://scottnicholson.com/pubs/meaningfulframework.pdf" target="_blank">Nicholson, 2012</a>). Finding a way to use the game design to motivate participants beyond simply acquiring points tends to be the common goal in using game design in orientations and instruction. Thinking of the WIIFM (What’s In It For Me) principle from a students’ perspective can help, and in the game design we used at the University of Arizona with SCVNGR for a class orientation, we created activities based on common questions and concerns of students.</p>
<h5><b>Why SCVNGR?</b></h5>
<div id="attachment_3345" class="wp-caption aligncenter" style="width: 455px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngr-home-screen.png"><img class=" wp-image-3345  " alt="scvngr home screen" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngr-home-screen.png" width="445" height="425" /></a><p class="wp-caption-text">scvngr home screen</p></div>
<p><b> </b></p>
<p><a href="http://scvngr.com/" target="_blank">SCVNGR</a> is a mobile app game for iPhone and Android where players can complete challenges in specific locations. Rather than getting clues and hints like in a traditional scavenger hunt, this game is more focused on activities within a location instead of finding the location. Although this takes some of the mystery away, it works very well for simply informing people about locations that are new to them and having them interact with the space.</p>
<p>Students need to physically be in the location for the app to work, where they use the location to search for “challenges” (single activities to complete) or “treks” (a series of single activities that make up the full experience for a location), and then complete the challenges or treks to earn points, badges, and recognition.</p>
<p>Some libraries have made their own mobile scavenger hunt activities without the aid of a paid app. For example, North Carolina State University uses <a href="http://www.lib.ncsu.edu/ris/projects/scavenger.php" target="_blank">the NCSU Libraries’ Mobile Scavenger Hunt</a>, which is a combination of students recording responses in Evernote, real time interaction, and tracking by librarians.  One of the reasons we went with SCVNGR, however, is because this sort of mobile orientation requires a good amount of librarian time and is synchronous, whereas SCVNGR does not require as much face-to-face librarian time and allows for asynchronous student participation. Although we do use more synchronous instruction for some of our classes, we also wanted to have the option for asynchronous activities, and in particular for the large-scale orientations where many different groups will come in at many different times. Although SCVNGR is not free for us, the app is free to students. They offer 24/7 support and other academic institutions offer insight and ideas in a <a href="http://www.scvngr.com/university" target="_blank">community for universities</a>.</p>
<p>Other academic libraries have used SCVNGR for orientations and even library instruction. A few examples are:</p>
<ul>
<li><a href="http://www.scvngru.com/apps/blog/show/12945099-ready-set-play-evaluation-of-the-uc-san-diego-libraries-scvngr-pilot" target="_blank">University of California – San Diego uses SCVNGR</a> for their orientations. They created a <a href="http://ucsd.libguides.com/scvngr" target="_blank">LibGuide specifically for their SCVNGR orientation</a> where they also post the scoreboard and photos.</li>
<li><a href="http://ir.library.oregonstate.edu/xmlui/handle/1957/20294?show=full" target="_blank">Oregon State University uses SCVNGR</a> for international student orientations to increase awareness and support the university initiative to increase the OSU international population from 5 to 10% of the student body.</li>
<li><a href="http://www.scvngru.com/bsuandosucasestudy.htm" target="_blank">Boise State is using SCVNGR</a> for instruction rather than a focus on orientations. They have provided information to students who then go on to create their own SCVNGR orientations as an assignment.</li>
<li><a href="http://crln.acrl.org/content/74/4/208" target="_blank">University of California – Merced recently wrote about SCVNGR</a> in their campus-wide orientations, incorporating other areas on campus into the library’s orientation. They decided to try out SCVNGR from UCSD&#8217;s positive feedback, but had some issues with student turnout and discuss possible reasons for this in the article.</li>
</ul>
<p>&nbsp;</p>
<h5><b>How did the UA Libraries use SCVNGR? </b></h5>
<p>Because a lot of instruction has moved online and there are so many students to reach, we are working on SCVNGR treks for both instruction and basic orientations at the University of Arizona (UA). We are in the process of setting up treks for large-scale campus orientations (New Student Orientation, <em>UA Up Close</em> for both parents and students, etc.) that take place during the summer, and we have tested SCVNGR  out on a smaller scale as a pilot for individual classes. There tends to be greater success and engagement if the Trek is tied to something, such as a class assignment or a required portion of an orientation session that must be completed. One concern for an app-based activity is that not all students will have smartphones. This was alleviated by putting students into groups ahead of time, ensuring that at least one person in the group did have a device compatible to use SCVNGR. However, we do lend technology at the UA Libraries, and so if a group was without a smartphone or tablet, they would be able to check one out from the library.</p>
<div id="attachment_3346" class="wp-caption aligncenter" style="width: 500px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngrpichomechallenge.png"><img class=" wp-image-3346 " alt="trek page for ais197b at ua libraries" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngrpichomechallenge.png" width="490" height="369" /></a><p class="wp-caption-text">trek page for ais197b at ua libraries</p></div>
<p>We first piloted a trek on an American Indian Studies student success course (AIS197b). This course for freshmen introduces students to services on campus that will be useful to them while they are at the UA. Last year, we presented a quick information session on library services, and then had the students complete a scavenger hunt for a class grade (participation points) with pencil and paper throughout the library. Although they seemed glad to be able to get out and move around, it didn&#8217;t seem particularly fun and engaging. On top of that, every time the students got stuck or had a question, they had to come back to the main floor to find librarians and get help.  In contrast, when students get an answer wrong in SCVNGR, feedback is programmed in to guide them to the correct information. And, because they don’t need clues to make it to the next step (they just go back and select the next challenge in the trek), they are able to continue without one mistake preventing them from moving on to the next activity. This semester, we first presented a brief instruction session (approximately 15-20 min) and then let students get started on SCVNGR.</p>
<p>You can see in the screenshot below how question design works, where you can select the location, how many points count toward the activity, type of activity (taking a photo, answering with text, or scanning a QR code), and then providing feedback. If a student answers a question incorrectly, as I mention above, they will receive feedback to help them in figuring out the correct answer. I really like that when students get answers right, they know instantly. This is positive reinforcement for them to continue.</p>
<div id="attachment_3344" class="wp-caption aligncenter" style="width: 500px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/right-wrong-answer.png"><img class=" wp-image-3344 " alt="scvngr answer feedback" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/right-wrong-answer.png" width="490" height="540" /></a><p class="wp-caption-text">scvngr answer feedback</p></div>
<p>The activities designed for students in this class were focused on photo and text-based challenges. We stayed away from QR codes because they can be finicky with some phones, and simply taking a picture of the QR code meets the challenge requirement for that option of activity. Our challenges included:</p>
<ul>
<li><b>Meet the reference desk</b> (above): Students meet desk staff and ask how they can get in touch for reference assistance; answers are by text and students type in which method they think they would use the most: email, chat, phone, or in person.</li>
<li><b>Prints for a day</b>: Students find out about printing (a frequent question of new students), and text in how to pay for printing after finding the information at the Express Documents Center.<b></b></li>
<li><b>Playing favorites</b>: Students wander around the library and find their favorite study spot. Taking a picture completes the challenge, and all images are collected in the Trek’s statistics.<b></b></li>
<li><b>Found in the stacks</b>: After learning how to use the catalog (we provided a brief instruction session to this class before setting them loose), students search the catalog for books on a topic they are interested in, then locate the book on the shelf and take a picture. One student used this time to find books for another class and was really glad he got some practice.<b></b></li>
<li><b>A room of one’s own</b>: The UA Libraries implemented online study room reservations as of a year ago. In order to introduce this new option to students, this challenge had them use their smartphones to go to the mobile reservation page and find out what the maximum amount of hours study rooms can be reserved for and text that in.</li>
</ul>
<p>SCVNGR worked great with this class for simple tasks, such as meeting people at the reference desk, finding a book, or taking a picture of a favorite study spot, but for tasks that might require more critical thinking or more intricate work, this would not be the best platform to use in that level of instruction. SCVNGR&#8217;s assessment options are limited for students to respond to questions or complete an activity. Texting in detailed answers or engaging in tasks like searching a database would be much harder to record. Likewise, because more instruction that is tied to critical thinking is not so much location-based (evaluating a source or exploring copyright issues, for example), and so it would be hard to tie these tasks and acquisition of skill to an actual location-based activity to track. One instance of this was with the Found in the Stacks challenge; students were supposed to search for a book in the catalog and then locate it on the shelf, but there would be nothing stopping them from just finding a random book on the shelf and taking a picture of it to complete the challenge. SCVNGR provides a <a href="http://support.scvngr.com/entries/20299541-SCVNGR-Style-Guide" target="_blank">style guide</a> to help in game design, and the overall understanding from this document is that simplicity is most effective for this platform.</p>
<p>Another feature that works well is being able to choose if the Trek is competitive or not, and also use “SmartRoute,” which is the ability to have challenges show up for participants based on distance and least-crowded areas. This is wonderful, particularly as students get sort of congested at certain points in a scavenger hunt: they all crowd around the same materials or locations simultaneously because they’re making the same progress through the activity. We chose to use SmartRoute for this class so they would be spread out during the game.</p>
<div id="attachment_3343" class="wp-caption aligncenter" style="width: 483px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/detailspic.png"><img class=" wp-image-3343 " alt="scvngr trek settings" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/detailspic.png" width="473" height="355" /></a><p class="wp-caption-text">scvngr trek settings</p></div>
<p>When trying to assess student effort and impact of the trek, you can look at stats and rankings. It&#8217;s possible to view specific student progress, all activity by all participants, and rankings organized by points.</p>
<div id="attachment_3347" class="wp-caption aligncenter" style="width: 503px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/stats.png"><img class=" wp-image-3347 " alt="scvngr statistics" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/stats.png" width="493" height="308" /></a><p class="wp-caption-text">scvngr statistics</p></div>
<p>Another feature is the ability to collect items submitted for challenges (particularly pictures). One of our challenges is for students to find their favorite study spot in the library and take a picture of it. This should be fun for them to think about and is fairly easy, and it helps us do some space assessment. It’s then possible to collect pictures like the following (student’s privacy protected via purple blob).</p>
<div id="attachment_3349" class="wp-caption aligncenter" style="width: 470px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngrpics.jpg"><img class=" wp-image-3349 " alt="student images of ua main library via scvngr" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/05/scvngrpics.jpg" width="460" height="614" /></a><p class="wp-caption-text">student images of ua main library via scvngr</p></div>
<p>On the topic of privacy, students enter in their name to set up an account, but only their first name and first initial of their last name appear as their username. Although last names are then hidden, SCVNGR data is viewable by anyone who is within the geographical range to access the challenge: it is not closed to an institution. If students choose to take pictures of themselves, their identity may be revealed, but it is possible to maintain some privacy by not sharing images of specific individuals or sharing any personal information through text responses. On the flip side of  not wanting to associate individual students with their specific activities, it gets trickier when an instructor plans to award points for student participation. In that case, it’s possible to request reports from SCVNGR for instructors so they can see how much and which students participated. In a large class of over 100 students, looking at the data can be messier, particularly if students have the same first name and last initial. Because of this issue, SCVNGR might be better used for large-scale orientations where participation does not need to be tracked, and small classes where instructors would be easily able to know who is who in the data for activity.</p>
<h5><b>Lessons learned</b></h5>
<p>Both student and instructor feedback was very positive. Students seemed to be having fun, laughing, and were not getting stuck nearly as much as the previous year’s pencil-and-paper hunt. The instructor noted it seemed a lot more streamlined and engaging for the class. When students checked in with us at the end before heading out, they said they enjoyed the activity and although there were a couple of hiccups with the software and/or how we designed the trek, they said it was a good experience and they felt more comfortable with using the library.</p>
<p>Next time, I would be more careful about using text responses. I had gone down to our printing center to tell the current student worker what answers students in the class would be looking for so she could answer it for them, but they wound up speaking with someone else and getting different answers. Otherwise, the level of questions seemed appropriate for this class and it was a good way to pilot how SCVNGR works, if students might like it, and how long different types of questions take for bringing this to campus on a larger scale. I would also be cautious about using SCVNGR too heavily for instruction, since it doesn&#8217;t seem to have capabilities for more complex tasks or a great deal of critical thinking. It is more suited to basic instruction and getting students more comfortable in using the library.</p>
<p><strong>Pros</strong></p>
<ul>
<li>Ability to reach many students and asynchronously</li>
<li>Anyone can complete challenges and treks; this is great for prospective students and families, community groups, and any programs doing outreach or partnerships outside of campus since a university login is not required.</li>
<li>Can be coordinate with campus treks if other units have accounts or a university-wide license is purchased.</li>
<li>WYSIWYG interface, no programming skills necessary</li>
<li>Order of challenges in a trek can be assigned staggered so not everyone is competing for the same resources at the same time.</li>
<li>Can collect useful data through users submitting photos and comments (for example, we can examine library space and student use by seeing where students’ favorite spots to study are).</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>SCVNGR is not free to use, an annual fee applies (in the $900-range for a library-only license, which is not institution-wide).</li>
<li>Privacy is a concern since anyone can see activity in a location; it’s not possible to close this to campus.</li>
<li>When completing a trek, users do not get automatic prompts to proceed to the next challenge; instead, they must go back to the home location screen and choose the next challenge (this can get a little confusing for students).</li>
<li>SCVNGR is more difficult to use with instruction, especially when looking to incorporate critical thinking and more complex activities</li>
<li>Instructors might have a harder time figuring out how to grade participation because treks are open to anyone; only students’ first name and last initial appear, so if either a large class completes a trek for an assignment or if an orientation trek for the public is used, a special report must be requested from SCVNGR that the library could send to the instructor for grading purposes.</li>
</ul>
<p>&nbsp;</p>
<h5><b>Conclusion</b></h5>
<p>SCVNGR is a good way to increase awareness and get students and other groups comfortable in using the library. One of the main benefits is that it’s asynchronous, so a great deal of library staff time is not required to get people interacting with services, collections, and space. Although this platform is not perfect for more in-depth instruction, it does work at the basic orientation level, and students and the instructor in the course we piloted it on had a good experience.</p>
<p>&nbsp;</p>
<h5><b>References</b></h5>
<p><strong></strong>Nicholson, S. (2012). <em>A user-centered theoretical framework for meaningful gamification</em>. Paper Presented at Games+Learning+Society 8.0, Madison, WI. Retrieved from <a href="http://scottnicholson.com/pubs/meaningfulframework.pdf" target="_blank">http://scottnicholson.com/pubs/meaningfulframework.pdf<em id="__mceDel"><em id="__mceDel"><em id="__mceDel">.</em></em></em></a></p>
<p>—-</p>
<p><em><span style="color: #888888;">About Our Guest Author: <strong>Nicole Pagowsky </strong>is an Instructional Services Librarian at the University of Arizona where she explores game-based learning, student retention, and UX. You can find her on Twitter, @</span><a href="https://twitter.com/pumpedlibrarian" target="_blank">pumpedlibrarian</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3342</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Librarian&#8217;s Guide to OpenRefine</title>
		<link>http://acrl.ala.org/techconnect/?p=3276</link>
		<comments>http://acrl.ala.org/techconnect/?p=3276#comments</comments>
		<pubDate>Wed, 01 May 2013 13:00:32 +0000</pubDate>
		<dc:creator>Margaret Heller</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[workflow]]></category>
		<category><![CDATA[google refine]]></category>
		<category><![CDATA[openrefine]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3276</guid>
		<description><![CDATA[Academic librarians working in technical roles may rarely see stacks of books, but they doubtless see messy digital data on a daily basis. OpenRefine is an extremely useful tool for dealing with this data without sophisticated scripting skills and with a very low learning curve. Once you learn a few tricks with it, you may [...]]]></description>
				<content:encoded><![CDATA[<p>Academic librarians working in technical roles may rarely see stacks of books, but they doubtless see messy digital data on a daily basis. <a href="http://openrefine.org/">OpenRefine</a> is an extremely useful tool for dealing with this data without sophisticated scripting skills and with a very low learning curve. Once you learn a few tricks with it, you may never need to force a student worker to copy and paste items onto Excel spreadsheets.</p>
<p>As this <a href="http://www.davidhuynh.net/spaces/nicar2011/tutorial.pdf">comparison by the creator of OpenRefine</a> shows, the best use for the tool is to explore and transform data, and it allows you to make edits to many cells and rows at once while still seeing your data. This allows you to experiment and undo mistakes easily, which is a great advantage over databases or scripting where you can&#8217;t always see what&#8217;s happening or undo the typo you made. It&#8217;s also a lot faster than editing cell by cell like you would do with a spreadsheet.</p>
<p>Here&#8217;s an example of a project that I did in a spreadsheet and took hours, but then I redid in Google Refine and took a lot less time. One of the quickest things to do with OpenRefine is spot words or phrases that are almost the same, and possibly are the same thing. Recently I needed to turn a large export of data from the catalog into data that I could load into my institutional repository. There were only certain allowed values that could be used in the controlled vocabulary in the repository, so I had to modify the bibliographic data from the catalog (which was of course in more or less proper AACR2 style) to match the vocabularies available in the repository. The problem was that the data I had wasn&#8217;t consistent&#8211;there were multiple types of abbreviations, extra spaces, extra punctuation, and outright misspellings. An example is the History Department. I can look at &#8220;Department of History&#8221;, &#8220;Dep. of History&#8221;, &#8220;Dep of Hist.&#8221; and tell these are probably all referring to the same thing, but it&#8217;s difficult to predict those potential spellings. While I could deal with much of this with regular expressions in a text editor and find and replace in Excel, I kept running into additional problems that I couldn&#8217;t spot until I got an error. It took several attempts of loading the data until I cleared out all the errors.</p>
<p>In OpenRefine this is a much simpler task, since you can use it to find everything that probably is the same thing despite the slight differences in spelling, punctuation and spelling. So rather than trying to write a regular expression that accounts for all the differences between &#8220;Department of History&#8221;, &#8220;Dep. of History&#8221;, &#8220;Dep of Hist.&#8221;, you can find all the clusters of text that include those elements and change them all in one shot to &#8220;History&#8221;. I will have more detailed instructions on how to do this below.</p>
<h5>Installation and Basics</h5>
<p>OpenRefine was called, until last October, Google Refine, and while the content from the Google Refine page is being moved to the Open Refine page you should plan to look at both sites. Documentation and video tutorials refer interchangeably to Google Refine and OpenRefine. The <a href="https://github.com/OpenRefine/OpenRefine/wiki/Documentation-For-Users" target="_blank">official and current documentation</a> is on the OpenRefine GitHub wiki. For specific questions you will probably want to use the <a href="http://openrefine.org/OpenRefine/documentation">OpenRefine Custom Search Engine</a>, which brings together all the mix of documentation and tutorials on the web. OpenRefine is a web app that runs on your computer, so you don&#8217;t need an internet connection to run it. You can get the installation instructions <a href="https://github.com/OpenRefine/OpenRefine/wiki/Installation-Instructions">on this page</a>.</p>
<p>While you can jump in right away and get started playing around, it is well worth your time to watch the tutorial videos, which will cover the basic actions you need to take to start working with data. As I said, the learning curve is low, but not all of the commands will make sense until you see them in action. These videos will also give you an idea of what you might be able to do with a data set you have lying around. You may also want to browse the &#8220;recipes&#8221; on the OpenRefine site, as well search online for additional interesting things people have done. You will probably think of more ideas about what to try. The most important thing to know about OpenRefine is that you can undo <em>anything</em>, and go back to the beginning of the project before you messed up.<br />
<iframe src="http://www.youtube.com/embed/B70J_H_zAWM" height="315" width="400" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/45EnWK-fE9k" height="315" width="400" allowfullscreen="" frameborder="0"></iframe></p>
<p><iframe src="http://www.youtube.com/embed/5tsyz3ibYzk" height="315" width="400" allowfullscreen="" frameborder="0"></iframe></p>
<p>A basic understanding of the <a title="Google Refine Expression Language" href="https://github.com/OpenRefine/OpenRefine/wiki/Google-refine-expression-language" target="_blank">Google Refine Expression Language, or GREL</a> will improve your ability to work with data. There isn&#8217;t a whole lot of detailed documentation, so you should feel free to experiment and see what happens when you try different functions. You will see from the tutorial videos the basics you need to know. Another essential tool is regular expressions. So much of the data you will be starting with is structured data (even if it&#8217;s not perfectly structured) that you will need to turn into something else. Regular expressions help you find patterns which you can use to break apart strings into something else. Spending a few minutes understanding regular expression syntax will save hours of inefficient find and replace. There are many tutorials&#8211;my go-to source is <a href="http://www.regular-expressions.info/" target="_blank">this one</a>. The good news for librarians is that if you can construct a Dewey Decimal call number, you can construct a regular expression!</p>
<h5>Some ideas for librarians</h5>
<p>&nbsp;</p>
<h6>(A) Typos</h6>
<p>Above I described how you would use OpenRefine to clean up messy and inconsistent catalog data. Here&#8217;s how to do it. Load in the data, and select &#8220;Text Facet&#8221; on the column in question. OpenRefine will show clusters of text that is similar and probably the same thing.</p>
<div id="attachment_3288" class="wp-caption aligncenter" style="width: 303px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/academicDept.jpg"><img class="size-full wp-image-3288 " alt="AcademicDept Text Facet" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/academicDept.jpg" width="293" height="291" /></a><p class="wp-caption-text">AcademicDept Text Facet</p></div>
<p>&nbsp;</p>
<p>Click on Cluster to get a menu for working with multiple values. You can click on the &#8220;Merge&#8221; check box and then edit the text to whatever you need it to be. You can also edit each text cluster to be the correct text.</p>
<div id="attachment_3287" class="wp-caption aligncenter" style="width: 310px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/cluster-and-edit.jpg"><img class="size-medium wp-image-3287" alt="Cluster and Edit" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/cluster-and-edit-300x192.jpg" width="300" height="192" /></a><p class="wp-caption-text">Cluster and Edit</p></div>
<p>You can merge and re-cluster until you have fixed all the typos. Back on the first Text Facet, you can hover over any value to edit it. That way even if the automatic clustering misses some you can edit the errors, or change anything that is the same but you need to look different&#8211;for instance, change &#8220;Dept. of English&#8221; to just &#8220;English&#8221;.</p>
<h6>(B) Bibliographies</h6>
<p>The main thing that I have used OpenRefine for in my daily work is to change a bibliography in plain text into columns in a spreadsheet that I can run against an API. This was inspired <a href="http://journal.code4lib.org/articles/7825">by this article in the Code4Lib Journal</a>: “Using XSLT and Google Scripts to Streamline Populating an Institutional Repository” by Stephen X. Flynn, Catalina Oyler, and Marsha Miles. I wanted to find a way to turn a text CV into something that would work with the <a href="http://www.sherpa.ac.uk/romeo/apimanual.php?la=en&amp;fIDnum=|&amp;mode=simple" target="_blank">SHERPA/RoMEO API</a>, so that I could find out which past faculty publications could be posted in the institutional repository. Since CVs are lists of data presented in a structured format but with some inconsistencies, OpenRefine makes it very easy to present the data in a certain way as well as remove the inconsistencies, and then to extend the data with a web service. This is a very basic set of instructions for how to accomplish this.</p>
<p>The main thing to accomplish is to put the journal title in its own column. Here&#8217;s an example citation in APA format, in which I&#8217;ve colored all the &#8220;separator&#8221; punctuation in red:</p>
<p>Heller, M<span style="color: #000000;">. <span style="color: #ff0000;">(</span></span>2011<span style="color: #ff0000;">).</span> A Review of “Strategic Planning for Social Media in Libraries”<span style="color: #ff0000;">.</span> <em>Journal of Electronic Resources Librarianship</em><span style="color: #ff0000;">,</span> 24 (4), 339-240)</p>
<p>From the drop-down menu at the top of the column click on &#8220;Split into several columns&#8230;&#8221; from the &#8220;Edit Column&#8221; menu. You will get a menu like the one below. This example finds the opening parenthesis and removes that in creating a new column. The author&#8217;s name is its own column, and the rest of the text is in another column.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine3.png"><img class="aligncenter size-medium wp-image-3291" alt="Spit into columns" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine3-300x163.png" width="300" height="163" /></a></p>
<p>&nbsp;</p>
<p>The rest of the column works the same way&#8211;find the next text, punctuation, or spacing that indicates a separation. You can then rename the column to be something that makes sense. In the end, you will end up with something like this:</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine5.png"><img class="aligncenter size-medium wp-image-3292" alt="Split columns" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine5-300x156.png" width="300" height="156" /></a></p>
<p>When you have the journal titles separate, you may want to cluster the text and make sure that the journals have consistent titles or anything else to clean up the titles. Now you are a ready to build on this data with fetching data from a web service. The third video tutorial posted above will explain the basic idea, and <a href="https://www.facebook.com/events/622650957762224/">this tutorial</a> is also helpful. Use the pull-down menu at the top of the journal column to select &#8220;Edit column&#8221; and then &#8220;Add column by fetching URLs&#8230;&#8221;. You will get a box that will help you construct the right URL. You need to format your URL in the <a href="http://www.sherpa.ac.uk/romeo/faq.php?fIDnum=%7C&amp;mode=simple&amp;la=en#api" target="_blank">way required by SHERPA/RoMEO</a>, and will need a free API key. For the purposes of this example, you can use <code>'http://www.sherpa.ac.uk/romeo/api29.php?ak=[YOUR API KEY HERE]&amp;qtype=starts&amp;jtitle=' + escape(value,'url')</code>. Note that it will give you a preview to see if the URL is formatted in the way you expect. Give your column a name, and set the Throttle delay, which will keep the service from rejecting too many requests in a short time. I found 1000 worked fine.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine7.png"><img class="aligncenter size-medium wp-image-3293" alt="refine7" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine7-300x237.png" width="300" height="237" /></a></p>
<p>After this runs, you will get a new column with the XML returned by SHERPA/RoMEO. You can use this to pull out anything you need, but for this example I want to get pre-archiving and post-archiving policies, as well as the conditions. A quick way to to this is to use the Googe Refine Expression Language parseHtml function. To use this, click on &#8220;Add column based on this column&#8221; from the &#8220;Edit Column&#8221; menu, and you will get a menu to fill in an expression.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine91.png"><img class="aligncenter size-medium wp-image-3294" alt="refine91" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine91-300x226.png" width="300" height="226" /></a></p>
<p>In this example I use the code <code>value.parseHtml().select("prearchiving")[0].htmlText()</code>, which selects just the text from within the prearchving element. Conditions are a little different, since there are multiple conditions for each journal. In that case, you would use the following syntax (after join you can put whatever separator you want): <code>forEach(value.parseHtml().select("condition"),v,v.htmlText()).join(". ")"</code></p>
<p>So in the end, you will end up with a neatly structured spreadsheet from your original CV with all the bibliographic information in its own column and the publisher conditions listed. You can imagine the possibilities for additional APIs to use&#8211;for instance, the <a href="http://oclc.org/developer/documentation/worldcat-basic-api/using-apihttp://">WorldCat API</a> could help you determine which faculty published books the library owns.</p>
<p>Once you find a set of actions that gets your desired result, you can save them for the future or to share with others. Click on Undo/Redo and then the Extract option. You will get a description of the actions you took, plus those actions represented in JSON.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine13.png"><img class="aligncenter size-medium wp-image-3295" alt="refine13" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/refine13-300x228.png" width="300" height="228" /></a></p>
<p>Unselect the checkboxes next to any mistakes you made, and then copy and paste the text somewhere you can find it again. I have the full <a href="https://gist.github.com/gloriousgeneralist/4739876">JSON for the example above in a Gist here</a>. Make sure that if you save your JSON publicly you remove your personal API key! When you want to run the same recipe in the future, click on the Undo/Redo tab and then choose Apply. It will run through the steps for you. Note that if you have a mistake in your data you won&#8217;t catch it until it&#8217;s all finished, so make sure that you check the formatting of the data before running this script.</p>
<h5>Learning More and Giving Back</h5>
<p>Hopefully this quick tutorial got you excited about OpenRefine and thinking about what you can do. I encourage you to read through the list of <a href="https://github.com/OpenRefine/OpenRefine/wiki/External-Resources">External Resources</a> to get additional ideas, some of which are library related. There is lots more to learn and lots of recipes you can create to share with the library community.</p>
<p>Have you used OpenRefine? Share how you&#8217;ve used it, and post your recipes.</p>
<ul>
<li><a href="https://twitter.com/OpenRefine">OpenRefine on Twitter</a>. If you post something about OpenRefine on Twitter, they will usually retweet you as a way to showcase what people are doing.</li>
<li><a href="https://groups.google.com/forum/?fromgroups#!forum/openrefine">OpenRefine Google Group</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3276</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>My #HuntLibrary: Using Instagram to Crowdsource the Story of a New Library</title>
		<link>http://acrl.ala.org/techconnect/?p=3174</link>
		<comments>http://acrl.ala.org/techconnect/?p=3174#comments</comments>
		<pubDate>Mon, 29 Apr 2013 13:03:43 +0000</pubDate>
		<dc:creator>Jason Casden</dc:creator>
				<category><![CDATA[library]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[#huntlibrary]]></category>
		<category><![CDATA[instagram]]></category>
		<category><![CDATA[ncsu]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3174</guid>
		<description><![CDATA[[Updated to reflect open-source availability. May 13th, 2013]   Introduction North Carolina State University opened the James B. Hunt Jr. Library in January of 2013, creating a heart for our Centennial Campus that defines the research library of the future. My #HuntLibrary was created as a platform to foster student and community engagement with the new [...]]]></description>
				<content:encoded><![CDATA[<address>[Updated to reflect open-source availability. May 13th, 2013]</address>
<address> </address>
<h5>Introduction</h5>
<p><a href="http://www.ncsu.edu" target="_blank">North Carolina State University</a> opened the <a href="http://www.lib.ncsu.edu/huntlibrary" target="_blank">James B. Hunt Jr. Library</a> in January of 2013, creating a heart for our Centennial Campus that <a href="http://www.lib.ncsu.edu/huntlibrary/vision" target="_blank">defines the research library of the future</a>. <a href="http://d.lib.ncsu.edu/myhuntlibrary" target="_blank">My #HuntLibrary</a> was created as a platform to foster student and community engagement with the new building via social media imagery and to preserve and archive these images as part of the record of the Hunt Library launch. <a href="http://d.lib.ncsu.edu/myhuntlibrary" target="_blank">My #HuntLibrary</a> is a Ruby on Rails application that harvests images from <a href="http://instagram.com/" target="_blank">Instagram</a> and provides several browsing views, mechanisms for sharing, tools for users to select their favorite images, an administrative interface for moderating images, and a system for harvesting images for inclusion in the NCSU Libraries digital archives. Built according to the principles of “responsive design,” My #HuntLibrary is usable on mobile devices, tablets, desktops, e-boards, and the massive MicroTiles displays in <a href="http://www.lib.ncsu.edu/huntlibrary/technology" target="_blank">the Hunt Library</a>.</p>
<p>In the three months since the launch of My #HuntLibrary (coinciding with the opening of the Hunt Library building), we received nearly 1700 images from over 600 different users, over 6800 “like” votes, and over 53,000 “battle” votes. This post will detail some of the risks involved with the project, the technical challenges we faced, how student engagement strengthened the project, and the potential benefits of giving students and community members a voice in the documentation of the Hunt Library.</p>
<p dir="ltr">The code that drives My #HuntLibrary has been extracted into an open-source Rails Engine called &#8220;<a href="https://github.com/NCSU-Libraries/lentil" target="_blank">lentil</a>&#8220; that is <a href="https://github.com/NCSU-Libraries/lentil" target="_blank">available on GitHub</a>.</p>
<div id="attachment_3195" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-screenshot.png"><img class="size-large wp-image-3195" title="My #HuntLibrary" alt="My #HuntLibrary front page" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-screenshot-1024x513.png" width="590" height="295" /></a><p class="wp-caption-text">My #HuntLibrary</p></div>
<h5 dir="ltr">Planning for Risk</h5>
<p dir="ltr">Most projects carry some level of risk and My #HuntLibrary was no different. It was difficult to predict the level of engagement we would be able to achieve with various application features. The timeline for development was short, carried a firm deadline (due to the need to launch alongside the new library), and included work with several technologies that were new to the development team. Additionally, the application relied on a third-party API that could change at any time. In order to mitigate project risks, we structured the project around goals with short and long (and more speculative) timelines that would each individually justify the project effort.</p>
<ol>
<li dir="ltr">
<p dir="ltr">Utilize social media to increase engagement with a new library</p>
</li>
</ol>
<p dir="ltr">Social media engagement with students was a linchpin of our opening strategy. Before the Hunt Library came online, NC State students already had a high degree of ownership over existing Libraries spaces and we sought to extend that to our new library. My #HuntLibrary could contribute to that sense of ownership by providing a platform for users of the new library to document and share their experience, learn about the experiences of their peers, and to collectively curate the images using voting tools. Furthermore, My #HuntLibrary is an opportunity for staff to learn about important and unexpected uses of the building during the critical post-launch period.</p>
<ol start="2">
<li dir="ltr">
<p dir="ltr">Provide a mechanism for students to contribute to digital collections</p>
</li>
</ol>
<p dir="ltr">We felt that the Hunt Library opening could be an opportunity for students to add their voices to the documentation of campus history that is preserved in our extensive digital collections. My #HuntLibrary could also allow us to leverage social technologies to diversify the perspectives reflected in our archival collections. This is our first major social media preservation effort and we hope that our project, along with others (such as GWU Libraries&#8217; <a href="https://github.com/gwu-libraries/social-feed-manager" target="_blank">Social Feed Manager</a>, or the State of North Carolina&#8217;s <a href="http://nc.gov.archivesocial.com/" target="_blank">Social Media Archive</a>), may begin to contribute possible answers to several questions related to social media archives, including:</p>
<ul>
<li dir="ltr">
<p dir="ltr">Can we utilize existing streams of social media content to integrate additional student perspectives in our documentation of the history of their university? Does this enhance our special collections?</p>
</li>
<li dir="ltr">
<p dir="ltr">Can an invitation to participate in core library practices, such as the development of special collections, serve as an effective engagement strategy?</p>
</li>
<li>What is the research value of social media collections? How does this value vary based on media, users, and harvesting methods?</li>
</ul>
<ol start="3">
<li dir="ltr">
<p dir="ltr">Explore new technologies</p>
</li>
</ol>
<p dir="ltr">The developers involved with the project created a support structure that included pair programming, code reviews, and tutorial sessions that mitigated many of the technical risks, including the integration of new software frameworks and libraries and the coordination of work on a tight schedule. This project also provided an opportunity to learn more about the design of interfaces for the large-scale displays described later in this article.</p>
<h5 dir="ltr">Student Engagement</h5>
<p dir="ltr">Although we knew it would be possible to utilize the <a href="http://instagram.com/developer/" target="_blank">Instagram API</a> to collect and display photographs about the Hunt Library, we needed to have a reasonable expectation that people (and students in particular) would participate in the project. This question hinged on the likelihood that a person would tag a photograph of the new library with a hashtag that would allow us to capture it. The Libraries had previous experience trying to engage students through Twitter around the question “What are you doing in the library right now?” We looked back on that project’s limitations to inform our engagement strategy. The chosen hashtag (#whyncsulib) was unique, but in order to answer our question, students had to be aware of the hashtag and willing to deviate somewhat from their normal social media communication patterns. However, we found that it was already common for students to use the tag #DHHill to visually depict their activities in our D. H. Hill Library on Instagram.<b><b> </b></b></p>
<div id="attachment_3198" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/dhhill_instagram_images.png"><img class=" wp-image-3198 " alt="Example #DHHill Instagram images" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/dhhill_instagram_images.png" width="590" /></a><p class="wp-caption-text">Example #DHHill Instagram images</p></div>
<p dir="ltr">Assuming that students would continue this tagging behavior at the new library, we chose the hashtag “#HuntLibrary” in hopes that it would see widespread adoption regardless of the level of awareness of our project.</p>
<p dir="ltr">As we began to design the application and develop a social media plan, another milestone in the project came with the opportunity to present the idea to actual students. The NCSU Libraries Student Advisory Board is charged with providing guidance and input on the programs and services the Libraries offers. This regular open meeting (fueled by free food) allowed us to collect feedback on specific questions about the project (e.g. do students want images to “Battle?”). The feedback from this presentation varied widely, from useful (e.g. roughly two-thirds of the students present had Instagram installed on their phones and yes, they want to battle) to unsanctionable (“If you want cute photographs you should let us bring cats into the library”). However, the general reaction from the students was that it seemed like a good idea, and we continued work with increased confidence.</p>
<p dir="ltr">The Student Advisory Board meeting also led to another breakthrough: our Director’s commitment of funds to award an iPad Mini to the photographer of the best image. Prior to the Advisory Board meeting, our only participation incentive was an assurance that the best photographs would be ingested into the University’s permanent digital archives. While this is a thrilling idea to a roomful of librarians, we were uncertain that students would have the same reaction. Perhaps unsurprisingly, when our Director asked the gathered students if they would take more pictures if there were an iPad Mini at stake, the students were unanimous in their response. Although we later learned in usability tests that students reacted very positively to the idea of contributing to their University’s story, the tablet prize gave the project a focal point, and the contest became the cornerstone of our student engagement strategy.</p>
<h5 dir="ltr">Display Technology</h5>
<p dir="ltr">The NCSU Libraries’ vision is to be NC State’s competitive advantage. This vision is often operationalized by putting cutting-edge technology in the hands of our students and faculty. For the Hunt Library, we made a strategic investment in large-scale, architecturally integrated visualization spaces such as ultra-high definition video walls and virtual environment studios. These visualization spaces serve as large canvases to reflect the research and activities of our campus in new interactive ways. The Hunt Library is, in short, a storytelling building.</p>
<p dir="ltr">We anticipated that My #HuntLibrary would produce a visually compelling record of the new library, and so we chose to display the photographic activity in one of the library’s most accessible visualization spaces: the iPearl Immersion Theater. The Theater features a curved video wall that is twenty-one feet wide and seven feet tall. The wall uses Christie MicroTiles, a modular display system based on LED and DLP technologies that gives the wall an effective resolution of 6824 pixels by 2240 pixels. MicroTiles feature high color saturation and a wide color spectrum, making them ideal for Instagram photographs of the colorful library. A key part of the technology behind the MicroTiles is a Christie Vista Spyder. The Spyder is a hardware-based video processor that allows for 12-bit scaling. This upsampling capability was important for our application, as it allowed small (612 pixels square) images to be enlarged to two-foot images in the Theater with very few noticeable compression artifacts.<b><b> </b></b></p>
<div id="attachment_3200" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL_microtiles_user.png"><img class=" wp-image-3200 " alt="Viewing My #HuntLibrary in the Immersion Theater. Photo by Instagram user crmelvin14." src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL_microtiles_user.png" width="590" /></a><p class="wp-caption-text">Viewing My #HuntLibrary in the Immersion Theater. Photo by Instagram user crmelvin14.<b><b> </b></b></p></div>
<p dir="ltr">As a public, physical space, the iPearl Immersion Theater allowed us to create embodied and shared user experiences that were fundamentally different from the web and mobile views of My #HuntLibrary. The Theater is a semi-open space near the entrance to the library, adjacent to an expansive reading lounge. The video wall installation had an attractive presence that invited passers-by inside to examine the images. Once inside the Theater, the content could be appreciated more fully by moving around in the space. Standing close to the wall enabled the user to see more detail about a particular photograph while moving farther away gave an impressionistic sense of the library’s spaces. While dwell times for the installation were sometimes low because users often dropped in for a moment before heading to their intended destination, seating in the Theater allowed for a more leisurely viewing experience as new photographs rotated into the display. Small groups of people gathered in the Theater to discuss the merits of their favorite photographs, point out their own photographs to their friends, and engage in conversations with strangers about the images.</p>
<h5 dir="ltr">Responsive Web Design</h5>
<p dir="ltr">With the large MicroTiles displays in the Hunt Library we now face the challenge of designing for very small (mobile device) and very large displays and many sizes in between (tablets, laptops, desktops, e-boards). The growing popularity of responsive web design techniques have helped developers and designers meet the challenge of building applications that work well on a wide range of device screen sizes. Responsive web design generally means using a combination of CSS3 media queries, fluid grids, and flexible images to progressively enhance a single web design for optimal display and use on a wide range of screen sizes and devices (<a href="http://alistapart.com/article/responsive-web-design" target="_blank">Marcotte 2010</a>). Most of the discussion of responsive design centers around building for devices ranging from phone-sized to desktop-sized displays. However, there is no technical reason why responsive design cannot work for even wider ranges of display sizes.</p>
<p dir="ltr">Our final design for My #HuntLibrary includes two different responsive designs, one of which supports mouse and touch interactions and display sizes ranging from phones to desktops, and another for non-interactive public display of the photographs on displays ranging from large eboards to more than twenty-foot wide Christie MicroTiles arrays. Our decision to build two different responsive designs for the smaller and larger sets of displays has more to do with the context in which these displays are used (personal, interactive devices versus public, non-interactive displays) than any technical limitations imposed by responsive web design techniques. In our case, the design of My #HuntLibrary for phones, tablets, and laptop and desktop computers has features to support interactive browsing, sharing photos, and a photo competition “Battle View” for people to compare sets of images and pick their favorites. These features would not translate well to the Libraries’ larger public displays, which range in size from a large eboard to huge Christie MicroTiles video walls, and which are, for now, mostly non-interactive. It made sense to develop a different view optimized to support a non-interactive display of the My #HuntLibrary photos. For the eboard-sized and larger public displays we developed a grid of images that are periodically replaced by new images, a few at a time.</p>
<div id="attachment_3204" class="wp-caption aligncenter" style="width: 488px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-mobile-screenshot.png"><img class="size-full wp-image-3204" alt="Mobile view of My #HuntLibrary." src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-mobile-screenshot.png" width="478" height="623" /></a><p class="wp-caption-text">Mobile view of My #HuntLibrary.</p></div>
<div id="attachment_3203" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-microtiles.jpg"><img class=" wp-image-3203 " alt="My #HuntLibrary on Christie MicroTiles in the Immersion Theater." src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/MHL-microtiles.jpg" width="590" /></a><p class="wp-caption-text">My #HuntLibrary on Christie MicroTiles in the Immersion Theater.</p></div>
<h5 dir="ltr">Collecting Social Media</h5>
<p dir="ltr">Although the initial development push was heavily focused on the core data management and display infrastructure, the longer-term goal of content preservation (for the sake of historical documentation rather than personal archives) influenced most aspects of the project. In particular, we have attempted and are continuing to address three major preservation-related themes: harvesting, crowdsourced curation, and legal clearance.</p>
<p dir="ltr">For short-term use of the images, we harvest only the metadata, leaving the images on the Instagram servers. Clearly, for long-term preservation we would need to collect the images themselves. This harvesting is complicated by the necessity to declare an arbitrary “break” from the source materials, at which point any changes to the metadata (or removal of the images) would not be reflected by our system. We are currently developing a milestone-based harvesting schedule that takes into account both the length of time the image is in the system and the submission of a donor agreement.</p>
<p dir="ltr">While we are currently planning on collecting all “#huntlibrary” images, we are very interested in the potential to allow our users to influence the selection process for certain parts of our archival collection. In order to test and support this goal, we developed two voting tools: individual image “like” voting and this-or-that “battle” voting. Our hope (which early usage metrics seem to support) is that we could use the data from these tools to select images for preservation, or at least to promote a subset of preserved images, that reflect the interests of our community. In addition to improving our selection processes, this may be an opportunity to promote archival selection as a student engagement tool by promoting opportunities for students to influence the historical record of their own experiences.</p>
<div id="attachment_3205" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/battle_screenshot.png"><img class="size-large wp-image-3205" alt="Image battle interface." src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/04/battle_screenshot-1024x468.png" width="590" height="269" /></a><p class="wp-caption-text">Image battle interface.</p></div>
<p dir="ltr">Finally, we worked with a lawyer and copyright specialist at our library to develop a donor agreement that was short and clear enough to be submitted as a comment on an image. Instagram users retain rights to their own images and thus the ability to grant the limited rights that we are requesting. Furthermore, the use of the Instagram comment system will allow us to automate this process, provided that we are responsive to takedown requests.</p>
<h5 dir="ltr">Conclusion</h5>
<p dir="ltr">In the three months since the launch of My #HuntLibrary (coinciding with the opening of the Hunt Library building), we received nearly 1700 images from over 600 different users, over 6800 “like” votes, and over 53,000 “battle” votes. In addition to these measures of user contributions (of either images or vote-based reviews), My #HuntLibrary recorded 135,908 pageviews from 10,421 unique visitors (according to Google Analytics) during this period. Furthermore, the project was regularly cited by students, staff, and institutional partners on social media channels, and was featured (with an emphasis on historical documentation) during the Hunt Library Dedication events.</p>
<p dir="ltr">The evaluation of the archival components of this application will take place on a longer timeline. We are currently extending the long-term content harvesting features in order to support these activities in a more automated way. We have received several indications of the value of pursuing image preservation features, including surprisingly enthusiastic reactions to questions about the preservation of images from students taking part in a My #HuntLibrary user study. As a particularly encouraging example, when an undergraduate student contributor to My #HuntLibrary was asked &#8220;How would you feel if one of your Instagram photos were selected by the library to be kept as a permanent record of what students did in 2013?&#8221; they responded, &#8220;I would be so excited. For me, I think it would be better than winning an iPad.&#8221;</p>
<p dir="ltr"><strong><em>About our guest authors: </em></strong></p>
<p><span style="color: #777777;"><em><strong>Jason Casden</strong> is the Lead Librarian for the Digital Services Development group at the North Carolina State University Libraries, where he helps to develop and implement scalable digital library applications. He is the project manager and a software developer for &#8220;My #HuntLibrary,&#8221; and has served as a project or technical lead for projects including the Suma physical space and service usage assessment toolkit, the WolfWalk geo-enhanced mobile historical guide, and Library Course Tools.</em></span></p>
<p><span style="color: #777777;"><em><strong>Mike Nutt</strong> is a Fellow at NCSU Libraries, where he leads a strategic initiative called “Networked Library: Marketing the 21st Century Library.” He is the product lead for My #HuntLibrary, and also facilitates content strategies for the large video walls in NC State’s new Hunt Library. He founded the University of North Carolina at Chapel Hill student group Carolina Digital Story Lab and was a research assistant at the UNC-CH Carolina Digital Library and Archives.</em></span></p>
<p><span style="color: #777777;"><em><strong>Cory Lown</strong> is Digital Technologies Development Librarian at North Carolina State University Libraries where he works collaboratively to design and develop applications to improve end-user resource discovery and use of library services. He has contributed as a developer and/or interface designer to a number of projects, including My #HuntLibrary, WolfWalk, QuickSearch, and the latest version of the library&#8217;s mobile website.</em></span></p>
<p dir="ltr"><span style="color: #777777;"><em><strong>Bret Davidson</strong> is currently a Digital Technologies Development Librarian at the North Carolina State University Libraries. Previously, Bret worked as an NCSU Libraries Fellow on visualization tools and resources to support the new James B. Hunt, Jr. Library. Prior to becoming a librarian, Bret was a music educator in the public schools of Pennsylvania and Illinois, as well as a performing musician with the River City Brass Band in Pittsburgh, PA.</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3174</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adventures with Raspberry Pi: A Librarian&#8217;s Introduction</title>
		<link>http://acrl.ala.org/techconnect/?p=2962</link>
		<comments>http://acrl.ala.org/techconnect/?p=2962#comments</comments>
		<pubDate>Mon, 22 Apr 2013 13:31:41 +0000</pubDate>
		<dc:creator>Nicholas Schiller</dc:creator>
				<category><![CDATA[library]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[raspberry pi]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=2962</guid>
		<description><![CDATA[Raspberry Pi Raspberry Pi, a $35 fully-functional desktop computer about the size of a credit card, is currently enjoying a high level of buzz, popularity, and media exposure. Librarians are, of course, also getting in on the action. I have been working with a Raspberry Pi to act as a low-power web server for a [...]]]></description>
				<content:encoded><![CDATA[<h5>Raspberry Pi</h5>
<div class="wp-caption aligncenter" style="width: 378px"><img class="  " alt="A Raspberry Pi computer" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/d2/Raspberry_Pi_Photo.jpg/1280px-Raspberry_Pi_Photo.jpg" width="368" height="272" /><p class="wp-caption-text">A Raspberry Pi computer (image credit: Wikimedia Commons)</p></div>
<p>Raspberry Pi, a $35 fully-functional desktop computer about the size of a credit card, is currently enjoying a high level of <a title="RPi in the Guardian" href="http://www.guardian.co.uk/artanddesign/architecture-design-blog/2013/mar/01/raspberry-pi-design-museum" target="_blank">buzz</a>, <a title="arstechnica story on 1 million RPi" href="http://arstechnica.com/information-technology/2013/03/the-raspberry-pi-one-year-since-launch-one-million-sold/" target="_blank">popularity</a>, and <a href="http://www.cnn.com/2012/12/21/tech/innovation/raspberry-pi-computer-upton/index.html" target="_blank">media exposure</a>. <a title="Library Journal on RPi OPAC terminals" href="http://www.thedigitalshift.com/2013/02/hardware-2/what-to-do-with-a-raspberry-pi-the-new-35-computer-that-could-replace-your-opac-terminals/" target="_blank">Librarians</a> are, of course, also <a title="Library blog post on RPi" href="http://www.westlakelibrary.org/?q=node/3665" target="_blank">getting in on the action</a>. I have been working with a Raspberry Pi to act as a low-power web server for a project delivering media-rich web content for museum exhibits in places without access to the internet. I&#8217;ve found working with the little Linux machine to be a lot of fun and I&#8217;m very excited about doing more with Raspberry Pi. However, as with many things librarians get excited about, it can be difficult to see through the enthusiasm to the core of the issue. Is the appeal of these cute little computers universal or niche? Do I need a Raspberry Pi in order to offer core services to my patrons? In other words: do we all need to run out and buy a Raspberry Pi, are they of interest to a certain niche of librarians, or are Raspberry Pi just the next library technology fad and soon to go the way of offering reference service in <a title="ALA Closes Second Life Island - R Tennant" href="http://www.thedigitalshift.com/2012/01/roy-tennant-digital-libraries/ala-closes-second-life-island/" target="_blank">Second Life</a>? <sup class='footnote'><a href='#fn-2962-1' id='fnref-2962-1' onclick='return fdfootnote_show(2962)'>1</a></sup> To help us answer this question, I&#8217;d like to take a moment to explain what a Raspberry Pi device is, speculate who will be interested in one, provide examples of some library projects that use Raspberry Pi, and offer a shopping list for those who want to get started.</p>
<h5>What is Raspberry Pi</h5>
<p>From the FAQ at <a href="http://www.raspberrypi.org/faqs" target="_blank">raspberrypi.org</a>:</p>
<blockquote><p>The Raspberry Pi is a credit-card sized computer that plugs into your TV and a keyboard. It’s a capable little PC which can be used for many of the things that your desktop PC does, like spreadsheets, word-processing and games. It also plays high-definition video. We want to see it being used by kids all over the world to learn programming.</p></blockquote>
<p>This description from Raspberry Pi covers the basics. (<a href="http://www.h2g2.com/approved_entry/A13735596" target="_blank">H2G2 has a more detailed history of the project</a>.) A Raspberry Pi (also known as a Raspi, or an RPi) is a small and inexpensive computer designed to extend technology education to young students who don&#8217;t currently have access to more expensive traditional computers. The Raspberry Pi project counteracts a movement away from general-purpose computing devices and toward internet appliances and mobile devices. <a href="http://www.pewinternet.org/~/media//Files/Reports/2012/PIP_Digital_differences_041312.pdf">The Pew Internet and American Life Project</a> notes that: &#8220;smartphone owners, young adults, minorities, those with no college experience, and those with lower household income levels are more likely than other groups to say that their phone is their main source of internet access.<sup class='footnote'><a href='#fn-2962-2' id='fnref-2962-2' onclick='return fdfootnote_show(2962)'>2</a></sup> Access to the internet today is pervasive and less expensive than ever before, but also more likely to come from an appliance or mobile device and without the programming tools and command-line control that were standard for previous generations of computer users. This means a smaller percentage of computer users are likely to pick up these skills on their own. Raspberry Pi offers a very-low cost solution to this lack of access to programming and command-line tools.</p>
<p>In addition to the stated goal of the Raspberry Pi organization, a lot of adults who already have access to technology are also very excited about the possibilities enabled by the small and cheap computing platform. What sets the Raspberry Pi apart from other computers is its combination of small size and low price. While you can do very similar things with a re-purposed or salvaged computer system running Linux, the Raspberry Pi is much smaller and uses less power. Similarly, you can do some of these things with a similarly-sized smart-phone, but those are much more expensive than a Raspberry Pi. For the technology hobbyist and amateur mad scientist, the Raspberry Pi seems to hit a sweet spot on both physical size and cost of entry.</p>
<p>The heart of the Raspberry Pi (or RPi) Model B is a Broadcom system-on-a-chip that includes a 700mhz ARM processor, 512mb RAM, USB and Ethernet controllers, and a graphics processor capable of HD resolutions. According to the FAQ its real-world performance is on par with a first generation Xbox or a 300mhz Pentium II computer. In my personal experience it is powerful enough for typical web browsing tasks or to host a WordPress based web site. Raspberry Pi devices also come with a GPIO (general purpose input and output) port, which enables an RPi to control electronic circuits. This makes the RPi a very flexible tool, but it doesn&#8217;t quite provide the full functionality of an Arduino or similar micro-controller<sup class='footnote'><a href='#fn-2962-3' id='fnref-2962-3' onclick='return fdfootnote_show(2962)'>3</a></sup>.</p>
<p>Out of the box, a Raspberry Pi will require some extra equipment to get up and running. There is a shopping list included at the bottom of the article that contains known working parts. If you keep boxes of spare parts and accessories around, just in case, you likely already have some of these parts. In addition to a $35 Raspberry Pi model b computer, you will definitely need an SD card with at least 4gb storage and a 5 volt 1 amp (minimum) micro-usb power supply. An extra cell phone charger looks like the right part, but probably does not put out the minimum amperage to run an RPi, but a tablet charger likely will. You can read the fine print on the &#8216;wall wart&#8217; part of the charger for its amperage rating.  If you want to use your Raspberry Pi as a workstation<sup class='footnote'><a href='#fn-2962-4' id='fnref-2962-4' onclick='return fdfootnote_show(2962)'>4</a></sup>, you&#8217;ll also need an HDMI cable, a digital monitor and a USB keyboard and mouse. Any USB keyboard or mouse will work, but the monitor will need to have an HDMI input. <sup class='footnote'><a href='#fn-2962-5' id='fnref-2962-5' onclick='return fdfootnote_show(2962)'>5</a></sup> Additionally, you may also want to use a USB wifi adapter to connect to wireless networks and since the Raspberry Pi has only two USB ports, you may also want a powered USB hub so you can connect more peripherals. The Raspberry Pi unit ships as a bare board, so you may want to keep your RPi in a case to protect it from rough handling.</p>
<h5>Who is the Raspberry Pi for?</h5>
<p>Now that we&#8217;ve covered what kind of kit is needed to get started, we can ask: are you the kind of librarian who is likely to be interested in a Raspberry Pi? I&#8217;ve noticed some &#8220;enthusiasm fatigue&#8221; out there, or librarians who are weary of overhyped tools that don&#8217;t provide the promised revolution. I love my Raspberry Pi units, but I don&#8217;t think they have universal appeal, so I&#8217;ve made a little quiz that may help you decide whether you are ready to order one today or pass on the fad, for now.</p>
<ol>
<li>Are you excited to work in a Linux operating system?</li>
<li>Are you willing to use trial and error analysis to discover just right configuration for your needs?</li>
<li>Do you enjoy the challenge of solving a living problem more than the security of a well-polished system?</li>
</ol>
<p>If the answer to all three of these questions is an enthusiastic YES, then you are just the kind of librarian who will love experimenting with a Raspberry Pi. If your enthusiasm is more tempered or if you answered no to one or more of the questions, then it is not likely that a Raspberry Pi will meet your immediate needs. RPi are <em>projects</em> not <em>products.</em> They make great prototypes or test-boxes, but they aren&#8217;t really a turn-key solution to any existing large-scale library problems. Not every library or librarian needs a Raspberry Pi, but I think a significant number of geeky and DIY librarians will be left asking: &#8220;Where have you been all my life?&#8221;</p>
<p>If you are a librarian looking to learn Linux, programming, or server administration and you&#8217;d rather do this on a cheap dedicated machine than on your work machine, Raspberry Pi is going to make your day. If you want to learn how to install and configure something like WordPress or Drupal and you don&#8217;t have a web server to practice on (and <a href="http://acrl.ala.org/techconnect/?p=2968" target="_blank">local AMP tools</a> aren&#8217;t what you are looking for) a Raspberry Pi is an ideal tool to develop that part of your professional skill set. If you want to <a href="https://www.adafruit.com/products/1089" target="_blank">learn code</a>, <a href="http://www.cl.cam.ac.uk/~db434/raspi/robot_control/" target="_blank">learn robotics</a>, or <a href="http://lifehacker.com/5978871/ten-more-awesome-projects-for-your-raspberry-pi" target="_blank">build DIY projects</a> then you&#8217;ll love Raspberry Pi. RPi are great for learning more about computers, networks, and coding. They are very educational, but at the end of the day they fall a bit more on the hobby end of the spectrum then on the professional product end.</p>
<h5>Raspberry Pi Projects for Librarians</h5>
<p>So, if you&#8217;ve taken the quiz and are still interested in getting started with Raspberry Pi, there are a few good starting points. If you prefer printed books <a href="http://shop.oreilly.com/product/0636920023371.do" target="_blank">O&#8217;Reilly Media&#8217;s Getting Started with Raspberry Pi</a> is fantastic. On the web. I&#8217;ve found <a href="http://elinux.org/RaspberryPiBoard" target="_blank">the Raspberry Pi wiki at elinux.org</a> to be an indispensable resource and <a href="http://elinux.org/RPi_Tutorials" target="_blank">their list of tutorials</a> is worth a special mention. <a href="http://learn.adafruit.com/category/learn-raspberry-pi" target="_blank">Adafruit (an electronics kit vendor and education provider) also has some very good tutorials and project guides</a>. For library specific projects, I have three suggestions, but there are many directions you may want to go with your Rasberry Pi. I&#8217;m currently working to set mine up as a web server for local content, so museums can offer rich interpretive media about their exhibits without having to supply free broadband to the public. When this is finished, I&#8217;m going to build projects two and three.</p>
<ul>
<li>
<h5 style="padding-left: 30px;">Project One: Get your RPi set up.</h5>
</li>
</ul>
<p style="padding-left: 30px;">This is the out-of-the-box experience and will take you through the set up of your hardware and software. <a href="http://www.raspberrypi.org/wp-content/uploads/2012/12/quick-start-guide-v1.1.pdf" target="_blank">RaspberryPi.org has a basic getting started guide</a>, <a href="http://learn.adafruit.com/adafruit-raspberry-pi-lesson-1-preparing-and-sd-card-for-your-raspberry-pi/" target="_blank">Adafruit has a more detailed walkthrough</a>, and there are <a href="http://www.youtube.com/user/RaspberryPiTutorials" target="_blank">some good YouTube tutorials</a> as well. In this project you&#8217;ll download the operating system for your Raspberry Pi, transfer it to your SD card, and boot up your machine, and perform the first time setup. Once you&#8217;re device is up and running you can spend some time familiarizing yourself with it and getting comfortable with the operating system.</p>
<ul>
<li>
<h5 style="padding-left: 30px;">Project One-Point-Five: Play with your Raspberry Pi</h5>
</li>
</ul>
<p style="padding-left: 30px;">Once your credit card sized computer is up and functional, kick the tires. Check out the graphical interface, <a href="http://coding.smashingmagazine.com/2012/01/23/introduction-to-linux-commands/">use the command line</a>, and try <a href="http://learn.adafruit.com/adafruits-raspberry-pi-lesson-6-using-ssh">running it headless</a>. Take baby steps if baby steps are what is fun and comfortable, or run headlong into a project that is big and crazy; the idea here is to have fun, get used to the environment, and learn enough to ask useful questions about what to do next. This is a good time to check out the <a href="http://learn.adafruit.com/category/learn-raspberry-pi" target="_blank">Adafruit series of tutorials</a> or <a href="http://elinux.org/RPi_Tutorials" target="_blank">elinux.org&#8217;s tutorial list</a>.</p>
<ul>
<li>
<h5 style="padding-left: 30px;">Project Two: Build an Information Kiosk to Display Local Mass Transit Information</h5>
</li>
</ul>
<p style="padding-left: 30px;"><a href="http://blog.bn.ee/2013/01/11/building-a-real-time-transit-information-kiosk-with-raspberry-pi/" target="_blank">http://blog.bn.ee/2013/01/11/building-a-real-time-transit-information-kiosk-with-raspberry-pi/</a></p>
<p style="padding-left: 30px;">I found this on the elinux list of tutorials and I think it is great for libraries, provided they are in an area served by <a href="http://news.nextbus.com/find-your-nextbus/select-your-nextbus-powered-transit-system/" target="_blank">NextBus</a> or a <a href="http://www.ctabustracker.com/bustime/home.jsp" target="_blank">similar</a> <a href="https://www.google.com/intl/en/landing/transit/" target="_blank">service</a>. The tutorial walks users through the process of building a dedicated information kiosk for transit information. The steps are clear and documented with photographs and code examples. Beginning users may want to refer to other references, such as <a href="http://shop.oreilly.com/product/0636920023371.do" target="_blank">the O&#8217;Reilly Book</a> or <a href="http://www.jeremymorgan.com/tutorials/raspberry-pi/how-to-linux/" target="_blank">a Linux Tutorial</a> to fill in some gaps.  I suspect the tricky bit will be finding a source for real-time GPS telemetry from the local transit service, but this is a great project for those who have worked through basic projects and are ready to build something practical for their library.</p>
<ul>
<li>
<h5 style="padding-left: 30px;">Project Three: Build a Dedicated OPAC Terminal.</h5>
</li>
</ul>
<p style="padding-left: 30px;">While dedicated OPAC terminals may no longer be the cutting edge of library technology, our patrons still need to find books on the shelves. <a href="http://www.thedigitalshift.com/2013/02/hardware-2/what-to-do-with-a-raspberry-pi-the-new-35-computer-that-could-replace-your-opac-terminals/" target="_blank">Library Journal&#8217;s Digital Shift blog</a> and <a href="http://whiteplainslibrary.org/2012/11/the-use-of-a-raspbian-based-apc-as-an-opac-kiosk-system/" target="_blank">John Lolis from the White Plains public library</a> describe a project that uses the Raspbian OS to power a catalog-only public terminal. The concept is straight-forward and working prototypes have been completed, but as of yet I do not see a step-by-step set of instructions for the beginner or novice. As a follow up to this post, I will document the build process for TechConnect. The gist of this project is to set up a kiosk-type browser, or a browser that only does a set task or visits a limited range of sites, on the Raspberry Pi. Eli Neiberger has raised some good questions on Twitter about <a href="https://twitter.com/ulotrichous/status/306976647091994624" target="_blank">the suitability of RPi hardware for rough-and-tumble public <s>abuse</s> use</a>, but this is the sort of issue testing may resolve. If librarians can crowd-source a durable low-cost OPAC kiosk using Lolis&#8217; original design, we&#8217;ll have done something significant.</p>
<h5>Raspberry Pi Shopping List</h5>
<p>As mentioned above, you may have many of these items already. If not, I&#8217;ve purchased and tested the following accessories for a couple of Raspberry Pi projects.</p>
<p>Basic Kit: (parts sourced through Amazon for ease of institutional purchase. Other sources may be preferable or less expensive.)</p>
<ul>
<li><strong>$35</strong> <a href="http://www.alliedelec.com/Search/ProductDetail.aspx?SKU=70229569" target="_blank">Raspberry Pi model b</a></li>
<li><strong>$15 </strong><a href="http://www.amazon.com/gp/product/B007M54DYA/ref=oh_details_o05_s00_i00?ie=UTF8&amp;psc=1" target="_blank">8gb SD card</a> (Less expensive cards are available)</li>
<li><strong>$10 </strong><a href="http://www.amazon.com/AmazonBasics-Wall-Charger-Outlet-Output/dp/B005CG2ATQ/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=I2LJ2CZEZ38OO" target="_blank">USB power supply</a></li>
<li><strong>$6 </strong><a href="http://www.amazon.com/AmazonBasics-USB-Cable-Micro-Meters/dp/B003ES5ZSW/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=IG65JOZ9FEG02" target="_blank">Micro USB cable</a></li>
</ul>
<p>Accessories:</p>
<ul>
<li><strong>$11</strong> <a href="http://www.amazon.com/Airlink-compatible-Wireless-Mini-USB-AWLL5099/dp/B006ZZUK5Y/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=I2MLNBXN1D9RTX" target="_blank">USB wifi adapter</a></li>
<li><strong>$12 </strong><a href="http://www.amazon.com/Case-Enclosure-Raspberry-Computer-Orange/dp/B00APO31PM/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=I2AZK3AS2WBOCT" target="_blank">Plastic case</a></li>
<li><strong>$20 </strong><a href="http://www.amazon.com/Cable-Matters-Plated-Premium-Adapter/dp/B00879DM56/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=IZ9W4XJDHFVGAhttp://www.amazon.com/Cable-Matters-Plated-Premium-Adapter/dp/B00879DM56/ref=wl_it_dp_o_nC?ie=UTF8&amp;colid=2JKNHQIFWLSFE&amp;coliid=IZ9W4XJDHFVGA" target="_blank">HDMI to VGA converter-adapter</a> (only necessary for using a vga only monitor w/ an RPi)</li>
</ul>
<p>Raspberry Pi kits (Some vendors have put together full kits with a wide range of parts and accessories. These kits include breadboards and parts for arduino-type projects.)</p>
<ul>
<li>$105 <a href="http://www.adafruit.com/products/1014" target="_blank">Adafruit Raspberry Pi starter pack</a></li>
<li>$130 <a href="http://www.makershed.com/Raspberry_Pi_Starter_Kit_Includes_Raspberry_Pi_p/msrpik.htm" target="_blank">Makershed Raspberry Pi starter kit</a> (includes the Getting Started with Raspberry Pi book)</li>
</ul>
<p><strong>Notes</strong></p>
<div class='footnotes' id='footnotes-2962'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-2962-1'>Good and necessary work is still being done in Second Life, but it has become a niche service, not a revolution in the way we provide library services.  <span class='footnotereverse'><a href='#fnref-2962-1'>&#8617;</a></span></li>
<li id='fn-2962-2'>http://www.pewinternet.org/~/media//Files/Reports/2012/PIP_Digital_differences_041312.pdf <span class='footnotereverse'><a href='#fnref-2962-2'>&#8617;</a></span></li>
<li id='fn-2962-3'>Check out <a href="http://forums.adafruit.com/viewtopic.php?f=24&amp;t=38723#p191685" target="_blank">this forum thread for a basic distinction between Arduino and Raspberry Pi.</a> <span class='footnotereverse'><a href='#fnref-2962-3'>&#8617;</a></span></li>
<li id='fn-2962-4'>The alternative is to run it &#8216;headless&#8217; over your network using SSH. <span class='footnotereverse'><a href='#fnref-2962-4'>&#8617;</a></span></li>
<li id='fn-2962-5'>Monitors with DVI input will work with a small and cheap HDMI to DVI adaptor. Analog monitors&#8211;the ones with blue VGA connectors&#8211;will work if you purchase an HDMI to VGA converter-adapter which start around $20. <span class='footnotereverse'><a href='#fnref-2962-5'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=2962</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Learn to Love the Command Line</title>
		<link>http://acrl.ala.org/techconnect/?p=3248</link>
		<comments>http://acrl.ala.org/techconnect/?p=3248#comments</comments>
		<pubDate>Mon, 15 Apr 2013 13:18:18 +0000</pubDate>
		<dc:creator>Eric Phetteplace</dc:creator>
				<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3248</guid>
		<description><![CDATA[&#8220;Then the interface-makers went to work on their GUIs, and introduced a new semiotic layer between people and machines. People who use such systems have abdicated the responsibility, and surrendered the power, of sending bits directly to the chip that&#8217;s doing the arithmetic, and handed that responsibility and power over to the OS.&#8221; —Neal Stephenson, [...]]]></description>
				<content:encoded><![CDATA[<blockquote><p>
    &#8220;Then the interface-makers went to work on their <abbr title="Graphical User Interface">GUI</abbr>s, and introduced a new semiotic layer between people and machines. People who use such systems have abdicated the responsibility, and surrendered the power, of sending bits directly to the chip that&#8217;s doing the arithmetic, and handed that responsibility and power over to the <abbr title="Operating System">OS</abbr>.&#8221;<br />
    —Neal Stephenson, <cite>In the Beginning was the Command Line</cite>
</p></blockquote>
<p>Many of us here at Tech Connect are fans of the command line. We&#8217;ve written posts on <a href="http://acrl.ala.org/techconnect/?p=2968">configuring a local server</a>, <a href="http://acrl.ala.org/techconnect/?p=2782">renaming files <em>en masse</em></a>, &amp; <a href="http://acrl.ala.org/techconnect/?p=3062">using the Git version control system</a> that are full of command line incantations, some mysterious and some magical. No doubt; the command line is intimidating. I&#8217;m sure most computer users, when they see it, think &#8220;Didn&#8217;t we move beyond this already? Can&#8217;t someone just write an app for that?&#8221; Up until about a year ago, I felt that way, but I&#8217;ve come to love the command line like Big Brother. And I&#8217;m here to convince you that you should love the command line, too.</p>
<h5 id="scripting">Scripting</h5>
<p>So why use a command line when you can probably accomplish almost everything in a graphical user interface (<abbr title="Graphical User Interface">GUI</abbr>)? Consider the most repetitive, dreary task you do on a daily basis. It might be copying text back-and-forth between applications over and over. You might periodically back up several different folders by copying them to an external drive. We all have repetitive workflows in dire need of automation. Sure, you could <a href="http://acrl.ala.org/techconnect/?p=633">write</a> <a href="http://acrl.ala.org/techconnect/?p=903">some macros</a>, but macros can be brittle, breaking when the slightest change is introduced. They&#8217;re often tricky to write correctly, so tricky that the blinking square at the start of the command prompt is starting to look promising.</p>
<p>One of the first joys of the command line is that <em>everything you do can be scripted</em>. Any set of steps, no matter how lengthy and intricate, can be compiled into a script which completes the process in a matter of seconds. Copy a dozen folders in disparate locations to a backup drive? No problem. Optimize a web app for deployment? A script can minify your JavaScript and <abbr title="Cascading Style Sheets">CSS</abbr>, concatenate files, optimize images, test your code for bugs, and even push it out to a remote server.</p>
<h5 id="available-software">Available Software</h5>
<p>It may seem odd, but moving to the Neanderthal command line can actually <em>increase</em> the amount of software available to you. There are lots of programs that don&#8217;t come with a graphical interface, either because they&#8217;re lightweight tools that don&#8217;t require a <abbr title="Graphical User Interface">GUI</abbr> or because their author knew that they&#8217;d be used almost exclusively by people comfortable with the command line. There are also many software packages that, while they have <abbr title="Graphical User Interface">GUI</abbr>s available, are more powerful on the command line. Git is a good example: there are numerous graphical interfaces and most are quite good. But learning the commands opens up a wealth of options, configurations, and customizations that just do not exist graphically.</p>
<h5 id="tying-it-all-together">Tying It All Together</h5>
<p>There are many wonderful <abbr title="Graphical User Interface">GUI</abbr>s that allow you to do complex things: generate visualizations, debug code, edit videos. But most applications are in their own separate silos and work you do in one app cannot be easily connected to any other. On the command line, output from one command can easily be &#8220;piped&#8221; into another, letting you create long chains of commands. For instance, let&#8217;s say I want to create a text document with all the filenames in a particular directory in it. With a file manager <abbr title="Graphical User Interface">GUI</abbr>, this is a royal pain: I can see a list of files but I can only copy their names one by one. If I click-and-drag to select all the names, the <abbr title="Graphical User Interface">GUI</abbr> thinks I want to select the <em>files</em> themselves and won&#8217;t let me paste the text of their names.</p>
<p>On the command line, I simply write the output of the <code>ls</code> command to a file: <a href="#fn1" id="note1">[1]</a></p>
<p><code>
<pre>ls -a &gt; filenames.txt
</pre>
<p></code></p>
<p>Now filenames.txt will list all the files and directories in the current folder. The <code>&gt;</code> writes the output of <code>ls -a</code> (list all files) and it&#8217;s one of a few different methods that redirects output. Now what if I want only filenames that contain a number in them?</p>
<p><code>
<pre>ls -a | grep [0-9] &gt; filenames-with-numbers.txt
</pre>
<p></code></p>
<p>I already have a list of all the file names, so I &#8220;pipe&#8221; the output of that command using the vertical bar <code>|</code> to <code>grep</code>, which in turn outputs only lines that have a number zero through nine in them, finally writing the text to filenames-with-numbers.txt. This is a contrived example but it illustrates something incredibly powerful about the command line: the text output of any command can easily be used as input for another command. While it may look like a lot of punctuated gibberish, it&#8217;s actually pretty intuitive to work with. Anyone who has tried copying <abbr title="Graphical User Interface">GUI</abbr>-formatted text into an environment with different formatting should be envious.</p>
<h5 id="repls">REPLs</h5>
<p>So you want to play around with a programming language. You&#8217;ve written a file named &#8220;hello-world.py&#8221; or &#8220;hello-world.rb&#8221; or &#8220;hello-world.php&#8221; but you have no idea how to get the code to <em>actually run</em>. Command line to the rescue! If you have the programming language installed and in <a href="#the-path">your path</a>, you can run <code>python hello-world.py</code> or <code>ruby hello-world.rb</code> or <code>php hello-world.php</code> and the output of your script will print right in your terminal. But wait, there&#8217;s more!</p>
<p>Many modern scripting languages come with a <abbr title="Read-Eval-Print Loop"><a href="https://en.wikipedia.org/wiki/REPL">REPL</a></abbr> built-in, which stands for &#8220;Read-Eval-Print loop.&#8221; In English, this means you write text that&#8217;s instantly evaluated as code in the programing language. For instance, below I enter the Python <abbr title="Read-Eval-Print Loop">REPL</abbr> and do some simple math:</p>
<p><code>
<pre>$ python
Python 2.7.2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&gt;&gt;&gt; 1 + 2
3
&gt;&gt;&gt; 54 * 34
1836
&gt;&gt;&gt; 64 % 3
1
&gt;&gt;&gt; exit()
</pre>
<p></code></p>
<p>The <code>$</code> represents my command prompt, so I simply ran the command <code>python</code> which entered the <abbr title="Read-Eval-Print Loop">REPL</abbr>, printing out some basic information like the version number of the language I&#8217;m using. Inside the <abbr title="Read-Eval-Print Loop">REPL</abbr>, I did some addition, multiplication, and a <a href="https://en.wikipedia.org/wiki/Modulo_operation">modulus</a>. The <code>exit()</code> function call at the end exited the <abbr title="Read-Eval-Print Loop">REPL</abbr> and put me back in my command prompt. There&#8217;s really no better way to try out a programming language than with a <abbr title="Read-Eval-Print Loop">REPL</abbr>. <a href="#fn2" id="note2">[2]</a> The <abbr title="Read-Eval-Print Loop">REPL</abbr> commands for Ruby and PHP are <code>irb</code> and <code>php -a</code> respectively.</p>
<h4 id="stumbling-blocks">Stumbling Blocks</h4>
<p>Everyone who starts out working on the command line will run into a bunch of common hangups. It&#8217;s frustrating, but it doesn&#8217;t need to be. It&#8217;s really like learning common user interface conventions: how would you know an anachronistic floppy disk means &#8220;save this file&#8221; if you hadn&#8217;t already clicked it a million times? Below is my attempt to alleviate some of the most common quirks of the command line.</p>
<h5 id="where-is-it">Where Is It?</h5>
<p>Before we get too far, it would probably be good to know how to get to a command prompt in the first place. You use a terminal emulator to open a command prompt in a window on your operating system. On a Mac, the terminal emulator is the aptly-named Terminal.app, which is located in Applications\Utilities. On Ubuntu Linux, there&#8217;s also a Terminal application which you can find using the Dash or with the handy <kbd>Ctrl+Alt+T</kbd> shortcut. <a href="#fn3" id="note3">[3]</a> <a href="http://www.kde.org/">KDE</a> Linux distributions use <a href="http://konsole.kde.org/">Konsole</a> as the default command line application instead. Finally, Windows has a couple terminal emulators and, sadly, they are incompatible with <a href="https://en.wikipedia.org/wiki/*nix">*NIX</a> shells like those found on Mac and Linux machines. Windows PowerShell can be found in Start &gt; All Programs &gt; Accessories or by searching after clicking the Start button. You can <a href="http://technet.microsoft.com/en-us/library/hh847889.aspx">open PowerShell on Windows 8</a> by searching as well.</p>
<h5 id="escaping-spaces">Escaping Spaces</h5>
<p>Spaces are a meaningful character on the command line: they separate one command from the next. So when you leave spaces in filenames or text strings, commands tend to return errors. You need to escape spaces in one of two ways: precede a space with a backslash, &#8220;\&#8221;, which tells the command line to interpret the following character literally (i.e. not as a directive), or by wrapping the string with spaces in quotes. So <code>mv File Name.txt New Name.txt</code> will be greeted with the usage information for the <code>mv</code> command because the program assumes you don&#8217;t understand how to use it, while <code>mv "Sad Cats.txt" "LOL Cats.txt"</code> will successfully rename &#8220;Sad Cats.txt&#8221; to &#8220;LOL Cats.txt&#8221;.</p>
<p>Luckily, you won&#8217;t need to type quotes or slashes very often due to the miracle that is tab completion. If you start typing a command or file name, you can hit the <kbd>tab</kbd> key and your shell will try to fill in the rest. If there are two names that begin identically then you&#8217;ll have to provide enough to disambiguate between the two: if &#8220;This is my file.txt&#8221; and &#8220;This is my second file.txt&#8221; are both in the same folder, you&#8217;ll have to type at least &#8220;This is my &#8221; and then, depending on whether your next letter is an F or an S, the shell can tab complete whatever follows to the appropriate name.</p>
<h5 id="copy-paste">Copy &amp; Paste</h5>
<p>Command line interfaces were invented before common <abbr title="Graphical User Interface">GUI</abbr> applications and their keyboard shortcuts like <kbd>Ctrl+V</kbd> and <kbd>Ctrl+C</kbd>. Those shortcuts were already assigned different actions on the command line and so they typically do not do what you&#8217;d expect, since for backwards compatibility they need to stick to their original meanings. So does that mean you have to type every long <abbr title="Uniform Resource Locator">URL</abbr> or string of text into the terminal? No! You can still copy-paste but it works a bit different on most terminals. On Ubuntu Linux, <kbd>Ctrl+Shift+C</kbd> or <kbd>V</kbd> will perform copy and paste respectively, while I&#8217;ve found that right-clicking in Windows PowerShell will paste. Mac OS X&#8217;s Terminal.app can actually use the conventional <kbd>⌘+C</kbd> or <kbd>⌘+V</kbd> because they don&#8217;t conflict with <kdb>Ctrl</kdb>.</p>
<h5 id="moving-around-the-line">Moving Around the Line</h5>
<p>Too many times I&#8217;ve typed out a long command, perhaps one with a <abbr title="Uniform Resource Locator">URL</abbr> or other pasted string of text in it, only to spot a typo dozens of characters back. On the command line, you cannot simply click to move your cursor to a different position, you have to press the back arrow dozens of times to go back and correct a mistake.</p>
<p>Or so I thought. On Mac&#8217;s Terminal.app, <a href="http://apple.stackexchange.com/questions/9016/how-to-jump-to-a-location-using-mouse-on-iterm-terminal">option-click</a> will move the cursor. Unfortunately, most other terminal applications don&#8217;t provide any mouse navigation. Luckily, there&#8217;s a series of keyboard shortcuts that work in many popular shells:</p>
<ul>
<li><kbd>Ctrl+A</kbd> jumps to the beginning of the line</li>
<li><kbd>Ctrl+E</kbd> jumps to the end of the line</li>
<li><kbd>Ctrl+U</kbd> deletes to beginning of line</li>
<li><kbd>Ctrl+K</kbd> deletes to end of line</li>
<li><kbd>Ctrl+W</kbd> deletes the word next to cursor</li>
</ul>
<p>Those shortcuts can save you a lot time and are often quicker than using the mouse. Typing <kbd>Ctrl+W</kbd> to delete a lengthy <abbr title="Uniform Resource Locator">URL</abbr> is much more convenient than shift-clicking with the mouse to select it all, then hitting the <kbd>delete</kbd> key.</p>
<h5 id="make-it-stop">Make It Stop!!!</h5>
<p>One of the first tips for learning the command line is to &#8220;read the friendly manual.&#8221; You can run the <code>man</code> command (short for manual) and pass it any other command to learn more about its usage, e.g. <code>man cp</code> will give you the manual of the copy command. However, the manual is often presented in a special format; it doesn&#8217;t just print the manual, it gives you a scrollable interface that replaces the command prompt. But how the heck do you exit the manual to get back to the command line? I&#8217;ll admit, when I was first learning, I used to simply close the terminal and re-open because I had no idea how to get out of the all-too-friendly manual.</p>
<p>But that&#8217;s unnecessary: pressing the letter <kbd>q</kbd> will quit the manual, while battering away on the ESC key or typing &#8220;exit please dear lord let me exit&#8221; won&#8217;t do a thing. <kbd>q</kbd> exits a few other commands, too.</p>
<p>Another good trick is <kbd>Ctrl+C</kbd> which causes a keyboard interrupt, canceling whatever process is running. I use this all the time because I frequently run a test server from the command line, or a <a href="http://sass-lang.com/">SASS</a> command that watches for file changes, or do something really stupid that will execute forever. <kbd>Ctrl+C</kbd> is always the exit strategy.</p>
<h5 id="the-path">The PATH</h5>
<p>So you installed the &#8220;awesomesauce&#8221; software, but every time you run <code>awesomesauce</code> in your command prompt you get a message like &#8220;command not found.&#8221; What gives?</p>
<p>All shells come with a <a href="https://en.wikipedia.org/wiki/PATH_(variable)">PATH</a> variable that specifies where the shell looks for executable programs. You can&#8217;t simply type the name of a script or executable anywhere on your system and expect the shell to know about it. Instead, you have to tell the command line where to look. Let&#8217;s say I just installed awesomesauce to ~/bin/awesomesauce where <code>~</code> stands for my user&#8217;s home folder (on Mac OS X this will be /Users/MyUsername, for example—you can run <code>echo ~</code> to see where your home folder is). Here&#8217;s how I get it working:</p>
<p><code>
<pre>$ # command isn&#039;t in my path yet - this is a comment by the way
$ awesomesauce
bash: awesomesauce: command not found
$ export PATH=$PATH:~/bin
$ awesomesauce
You executed the Awesome Sauce command! Congratulations!
</pre>
<p></code></p>
<p>The <code>export</code> command lets me modify my PATH variable, appending the <code>~/bin</code> directory to the list of other places in the PATH. Now that the shell is looking in <code>~/bin</code>, it sees the <code>awesomesauce</code> command and lets me run it from the command line.</p>
<p>It quickly gets tedious appending directories to your PATH every time you want to use something, so it&#8217;s wise to use a startup script that runs every time you open a new Terminal. In <abbr title="Bourne-Again SHell">BASH</abbr>, the common shell that comes with Mac OS X and is the default in most Linux distributions, you can do this by adding the appropriate <code>export</code> commands to a file named .bash_profile in your home file. The commands in .bash_profile are executed every time a new Terminal window is opened.</p>
<h5 id="use-the-google-my-friend">Use the Google, my Friend</h5>
<p>There are certainly other hangups not covered above, but a tremendous amount of good information exists on the web. People have been using command line interfaces for quite a while now and there is documentation for almost everything. There are great question-and-answer forums, like StackExchange&#8217;s <a href="http://superuser.com/">Superuser</a> section, with tons of content on the command line and writing shell scripts. I&#8217;ve basically self-taught myself the command line using Google and a few select sources. In fact, the <code>man</code> command alone is one of the shining advantages of the command line: image if you could just type text like <code>man spot healing brush</code> in PhotoShop to figure out how all those crazy tools work?</p>
<p>Learning the command line is a challenge but it&#8217;s well worth the investment. Once you have a few basics under your belt, it opens up vast possibilities and can greatly increase your productivity. Still, I wouldn&#8217;t say that everyone needs to know the command line. <a href="http://senseandreference.wordpress.com/2013/03/08/is-coding-an-essential-library-skill/">Not everyone needs to learn coding</a> either, but everyone can benefit from it. With a little practice, some trial and error, and many, many Google searches, you&#8217;ll be well on your way to commandeering like a boss.</p>
<h4 id="further-reading">Further Reading</h4>
<p><a href="http://wiki.bash-hackers.org/doku.php">wiki.bash-hackers.org</a> &#8211; a great wiki for learning more about the common BASH shell</p>
<p><a href="http://ss64.com/">ss64.com</a> &#8211; command line reference</p>
<p><a href="https://help.ubuntu.com/community/UsingTheTerminal">Using the Terminal</a> &#8211; Ubuntu&#8217;s guide to the command line</p>
<p><a href="http://www.cryptonomicon.com/beginning.html">In the Beginning was the Command Line</a> &#8211; Neal Stephenson&#8217;s treatise about the command line, <abbr title="Graphical User Interface">GUI</abbr>s, Windows, Linux, &amp; BeOS. It actually isn&#8217;t that much about the command line but it&#8217;s an interesting read.</p>
<h4 id="footnotes">Footnotes</h4>
<p><span id="fn1">[1]</span><a href="#note1">^</a> The commands listed in this post will not work on Windows, but that doesn&#8217;t mean you can&#8217;t do the same things: the names and syntax of the commands are just different. It&#8217;s worth noting that Windows users can use the <a href="http://www.cygwin.com/">Cygwin</a> project to get a shell experience comparable to *NIX systems.</p>
<p><span id="fn2">[2]</span><a href="#note2">^</a> If you&#8217;re still too scared to try the command line after this post, the great <a href="http://repl.it/languages">repl.it</a> site provides <abbr title="Read-Eval-Print Loop">REPL</abbr>s for over a dozen different programming languages.</p>
<p><span id="fn3">[3]</span><a href="#note3">^</a> The default terminal on Ubuntu, and many other Linuxes, is technically &#8220;GNOME Terminal&#8221; but it may show up as just Terminal in search results. While these are the default terminals, most systems have more advanced alternatives that offer a few niceties like arranging terminal windows in a grid, paste history, and configurable keyboard shortcuts. On Mac, <a href="http://www.iterm2.com">iTerm2</a> is an excellent choice. <a href="http://lifehacker.com/5858676/the-best-terminal-emulator-for-linux">Lifehacker recommends</a> <a href="http://www.tenshu.net/p/terminator.html">Terminator</a> for Linux, and it is also available for Windows and Mac. Wikipedia has an <a href="https://en.wikipedia.org/wiki/List_of_terminal_emulators">unnecessarily long list</a> of terminal emulators for the truly insane.</p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3248</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing with JavaScript and JQuery &#8211; the Ebook link HTML string generator and the EZproxy bookmarklet generator</title>
		<link>http://acrl.ala.org/techconnect/?p=3098</link>
		<comments>http://acrl.ala.org/techconnect/?p=3098#comments</comments>
		<pubDate>Mon, 08 Apr 2013 16:49:59 +0000</pubDate>
		<dc:creator>Bohyun Kim</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3098</guid>
		<description><![CDATA[In this post, I will describe two cases in which I solved a practical problem with a little bit of JavaScript and JQuery. Check them out first here before reading the rest of the post which will explain how the code works. Library ebook link HTML string generator EZproxy bookmarklet generator &#8211; Longer version (with [...]]]></description>
				<content:encoded><![CDATA[<p>In this post, I will describe two cases in which I solved a practical problem with a little bit of JavaScript and JQuery. Check them out first here before reading the rest of the post which will explain how the code works.</p>
<ol>
<li><a href="http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/link.html">Library ebook link HTML string generator</a></li>
<li><a href=" http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/bkmklt.html">EZproxy bookmarklet generator &#8211; Longer version (with EZproxy Suffix)</a></li>
<li><a href=" http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/ezproxy_bookmarklet_generator.html">EZproxy bookmarklet generator &#8211; Shorter version (with EZproxy Prefix)</a></li>
</ol>
<div class="wp-caption aligncenter" style="width: 510px"><img alt="" src="http://farm1.staticflickr.com/212/448573998_9db65f2d2a.jpg" width="500" height="329" /><p class="wp-caption-text">Source: http://www.flickr.com/photos/albaum/448573998/</p></div>
<h5>1. Library ebook link HTML string generator</h5>
<p>If you are managing a library website, you will be using a lot of hyperlinks for library resources. Sometimes you can distribute some of the repetitive tasks to student workers, but they are usually not familiar with HTML. I had a situation in which I needed to add a number of links for library e-books for <a href="http://libguides.medlib.fiu.edu/courseebooks">my library&#8217;s Course E-book LibGuide page</a>, when I was swamped with many other projects at the same time. So I wondered if I could somehow still use the library&#8217;s student assistant&#8217;s help by creating an providing a simple tool, so that the student only needs to input the link title and url and get me the result as HTML. This way, I can still delegate some work when I am swamped with other projects that require my attention. <span style="color: #4c4c4c;"><em>(N.B. Needless to say, this doesn&#8217;t mean that what I did was the best way to use the student assistance for this type of work. I didn&#8217;t want them to edit the page directly because this page had tabs tabs and the student using the WYSWYG editor might inadvertently remove part of the tabbed box code.)</em></span></p>
<p>The following code exactly does that.</p>
<ul>
<li><a href="http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/link.html">Create a block of strings that you can drop into a html page</a></li>
<li><a href="https://github.com/bohyunkim/examples/blob/master/link.html">Code</a> (Also shown below)</li>
</ul>
<p>This HTML form takes an e-book title and the link to the book as input and spits out a hyperlink as a list item as a result. For example, if you fill in the title field with <em><span style="color: #333399;">&#8216;Bradley’s Neurology in Clinical Practice&#8217;</span></em> and the link field with its url: <em><span style="color: #333399;">http://ezproxy.fiu.edu/login?url=http://www.mdconsult.com/public/book/view?title=Daroff:+Bradley&#8217;s+Neurology+in+Clinical+Practice</span></em>, then the result would be shown in the text area : <em><span style="color: #333399;">&lt;li&gt;&lt;a href=&#8221;http://ezproxy.fiu.edu/login?url=http://www.mdconsult.com/public/book/view?title=Daroff:+Bradley&#8217;s+Neurology+in+Clinical+Practice&#8221;&gt; Bradley’s Neurology in Clinical Practice&lt;/a&gt;&lt;/li&gt;</span>  </em>I also wanted the library student assistant to be able to do this for many e-books at once and just send me the whole set of HTML snippets that cover all ebooks. So after running the form once, if one fills out the title and the link field with another e-book information, the result would be added to the end of the previous HTML string and be displayed in the text area. The result would be like this: <em><span style="color: #333399;">&lt;li&gt;&lt;a href=&#8221;http://ezproxy.fiu.edu/login?url=http://www.mdconsult.com/public/book/view?title=Daroff:+Bradley&#8217;s+Neurology+in+Clinical+Practice&#8221;&gt; Bradley’s Neurology in Clinical Practice&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&#8221;http://ezproxy.fiu.edu/login?url=http://www.accessmedicine.com/resourceTOC.aspx?resourceID=64&#8243;&gt;Cardiovascular Physiology&lt;/a&gt;&lt;/li&gt;. </span></em>Since the code is in the text area, the student can also edit if there was any error when s/he was filling out the form after clicking the button &#8216;Send to Text Area&#8217;.</p>
<p>Now, let&#8217;s take a look at what is going on behind the scene. This is the entire html file. The Javascript/JQuery code that is generating the html string in the text area is from line 22-32.</p>
<pre class="brush: html; gutter: true">&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;p&gt;
		This page creates the html-friendly string for a link with a title and a url. 
		&lt;ul&gt;
		&lt;li&gt;Fill out the form below and click the button. &lt;/li&gt;
		&lt;li&gt;If the link is messy, clean up first by using the &lt;a href=&quot;http://meyerweb.com/eric/tools/dencoder/&quot;&gt;URL decoder&lt;/a&gt;.&lt;/li&gt;
		&lt;li&gt;Copy and paste the result inside the text area after you are done.&lt;/li&gt;
		&lt;/ul&gt;	
	&lt;/p&gt;
	&lt;p&gt;
		Title: &lt;input type=&quot;text&quot; id=&quot;title1&quot; size=&quot;100&quot;/&gt;&lt;br/&gt;
		Link: &lt;input type=&quot;text&quot; id=&quot;link1&quot; size=&quot;100&quot;/&gt;&lt;br/&gt;
		&lt;button id=&quot;b1&quot;&gt;Send to Text Area&lt;/button&gt;
	&lt;/p&gt;
	&lt;p id=&quot;result1&quot;&gt;&lt;/p&gt;
	&lt;textarea rows=&quot;20&quot; cols=&quot;80&quot;&gt;&lt;/textarea&gt;

	&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){	
	  $(&quot;#b1&quot;).click(function(){
	  //  alert(&#039;&lt;a href=&quot;&#039;+$(&quot;#link&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title&quot;).val()+&quot;&lt;/a&gt;&quot;);
	    $(&#039;#result1&#039;).text(&#039;&lt;li&gt;&lt;a href=&quot;&#039;+$(&quot;#link1&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title1&quot;).val()+&quot;&lt;/a&gt;&lt;/li&gt;&quot;);
	    var res1=&#039;&lt;li&gt;&lt;a href=&quot;&#039;+$(&quot;#link1&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title1&quot;).val()+&quot;&lt;/a&gt;&lt;/li&gt;&quot;;
	    $(&#039;textarea&#039;).val($(&#039;textarea&#039;).val()+res1);
	 //   $(&#039;textarea&#039;).text(res1);
	  });
	}); // doc ready
	&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Since I am using JQuery I am starting with the obligatory $(document).ready in line 2. In line 3,  I am giving a callback function that will be executed when the #b1 &#8211; the button with the id of b1 in line 17 above- is clicked.  Line 4 is commented out. I used this initially to test if I am getting the right string out of the input from the title and the link field using the JS alert. Line 5 is filling the p tag with the id of result 1 in line 19 above with the thus-created string. The string is also saved in variable res1 in line 7. Then it is attached to the content of the textarea field in line 8. Line 9 is commented out. If you use line 9 instead of line 8, any existing content in the textarea will be removed and only the new string created from the title and the link field will show up in the text area.</p>
<pre class="brush: javascript; gutter: true">&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){	
	  $(&quot;#b1&quot;).click(function(){
	  //  alert(&#039;&lt;a href=&quot;&#039;+$(&quot;#link&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title&quot;).val()+&quot;&lt;/a&gt;&quot;);
	    $(&#039;#result1&#039;).text(&#039;&lt;li&gt;&lt;a href=&quot;&#039;+$(&quot;#link1&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title1&quot;).val()+&quot;&lt;/a&gt;&lt;/li&gt;&quot;);
	    var res1=&#039;&lt;li&gt;&lt;a href=&quot;&#039;+$(&quot;#link1&quot;).val()+&#039;&quot;&gt;&#039; + $(&quot;#title1&quot;).val()+&quot;&lt;/a&gt;&lt;/li&gt;&quot;;
	    $(&#039;textarea&#039;).val($(&#039;textarea&#039;).val()+res1);
	 //   $(&#039;textarea&#039;).text(res1);
	  });
	}); // doc ready
&lt;/script&gt;</pre>
<p>You do not have to know a lot about scripting to solve a simple task like this!</p>
<h5>2. EZproxy bookmarklet generator &#8211; Longer version</h5>
<p>My second example is a bookmarklet that reloads the current page through a specific EZproxy system.</p>
<ul>
<li><a href=" http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/bkmklt.html">EZproxy bookmarklet creator- Longer version</a></li>
<li><a href="https://github.com/bohyunkim/examples/blob/master/bkmklt.html">Code</a> (Also shown below)</li>
</ul>
<p>If you think that this bookmarklet reinvents the wheel since <a href="http://libx.org/editions/downloadlibx2.php?edition=EEA9C109">the LibX toolbar</a> already does this, you are correct. And also if you are a librarian working with e-resources, you already know to add the EZproxy suffix at the end of the domain name of the url when a patron asks if a certain article on a web page is available through the library or not. But I found that no matter how many times I explain this trick of adding the EZproxy suffix to patrons, the trick doesn&#8217;t seem to stick in their busy minds. Also, many doctors and medical students, who are the primary patrons of my library, work at the computers in hospitals and they do not have the necessary privilege to install a toolbar on those computers. But they can create a bookmark.</p>
<p>Similarly, many students asked me why there is no LibX toolbar for their mobile devices unlike in their school laptops. (In the medical school where I work, all students are required to purchase a school-designated laptop; this laptop is pre-configured with all the necessary programs including the library LibX toolbar.) Well, mobile devices are not exactly computers and so the browser toolbar doesn&#8217;t work. But students want an alternative and they can create a bookmark on their tablets and smartphones. So the proxy bookmarklet is still a worthwhile tool for the mobile device users.</p>
<p>This is where the bookmarklet is: <a href=" http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/bkmklt.html">http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/bkmklt.html. </a>To test, drag the link on the top that says <strong>Full-Text from FIU Library </strong>to your bookmark toolbar. Then go to <a href="http://jama.jamanetwork.com/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P">http://jama.jamanetwork.com/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P</a>. Click the new bookmarklet you got on your toolbar. The page will reload and you will be asked to log in through the Florida International University EZproxy system. When you are authenticated, you will be seeing the page proxied: <a href="http://jama.jamanetwork.com.ezproxy.fiu.edu/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P">http://jama.jamanetwork.com.ezproxy.fiu.edu/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P</a>.</p>
<p>You will be surprised to see how simple the bookmarklet is <span style="color: #993300;"><em>(and there is even a shorter version than this which I will show in the next section)</em></span>. It is a JavaScript function wrapped inside a hyperlink. Lines 2-5 each takes the domain name, the path name, and any search string after the url path from <a href="http://www.javascriptkit.com/jsref/location.shtml">the current window location object</a>. So in the case of <a href="http://jama.jamanetwork.com.ezproxy.fiu.edu/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P">http://jama.jamanetwork.com.ezproxy.fiu.edu/Issue.aspx?journalid=67&amp;issueID=4452&amp;direction=P</a>, location.host is <em><span style="color: #333399;">http://jama.jamanetwork.com </span></em>and location.pathname is <em><span style="color: #333399;">Issue.aspx</span></em> . The rest of the url <em>&#8211; <span style="color: #333399;">?journalid=67&amp;issueID=4452&amp;direction=P </span></em>&#8211; is location.search. In line 4, I am putting my institution&#8217;s ezproxy suffix between these two, and in line 5, I am asking the browser load this new link.</p>
<pre class="brush: html; gutter: true">&lt;a href=&quot;javascript:(function(){
	var host=location.host;
	var path=location.pathname;
	var srch=location.search;
	var newlink=&#039;http://&#039;+host+&#039;.ezproxy.fiu.edu&#039;+path+srch;
	window.open(newlink);
})();&quot;&gt;Full-Text from FIU Library&lt;/a&gt;</pre>
<p>Now let&#8217;s take a look at the whole form. I created this form for those who want to create a ready-made bookmarklet recipe. All they need is their institution&#8217;s EZproxy suffix and whatever name they want to give to the bookmarklet. Once one fills out those two fields and click &#8216;Customize&#8217; button, one will get the full HTML page code with the bookmarklet as a link in it.</p>
<pre class="brush: html; gutter: true">&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;EZproxy Bookmarklet&lt;/h1&gt;	
&lt;p&gt;&lt;ul&gt;&lt;li&gt;
	&lt;a href=&quot;javascript:(function(){
		var host=location.host;
		var path=location.pathname;
                var srch=location.search;
                var newlink=&#039;http://&#039;+host+&#039;.ezproxy.fiu.edu&#039;+path+srch;
		window.open(newlink);
	})();&quot;&gt;Full-Text from FIU Library&lt;/a&gt; 
	(Drag the link to the bookmark toolbar!)
&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;This is a bookmarket that will reroute a current page through FIU EZproxy.
	&lt;br/&gt;
If you have the LibX toolbark installed, you do not need this bookmarklet. Simply select &#039;Reload Page via XYZ EZproxy&#039; on the menu that appears when you right click.
	&lt;br/&gt;
Created by Bohyun Kim on March, 2013. 	
&lt;/p&gt;
&lt;h2&gt;How to Test&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;Drag the link above to the bookmark toolbar of your web browser.&lt;/li&gt;
	&lt;li&gt;Click the bookmark when you are on a webpage that has an academic article.&lt;/li&gt;
	&lt;li&gt;It will ask you to log in through the FIU EZproxy.&lt;/li&gt;
	&lt;li&gt;Once you are authenticated and the library has a subscription to the journal, you will will able to get the full-text article on the page.&lt;/li&gt;
	&lt;li&gt;Look at the url and see if it contains .ezproxy.fiu.edu. If it does, the bookmarklet is working.&lt;/li&gt;
&lt;/ul&gt;	

&lt;h2&gt;Make One for Your Library&lt;/h2&gt;
	&lt;p&gt;
		Bookmark title: &lt;input type=&quot;text&quot; id=&quot;title1&quot; size=&quot;40&quot; placeholder=&quot;e.g. Full-Text ABC Library&quot;/&gt;
		&lt;em&gt;e.g. Full-text ABC Library&lt;/em&gt;
		&lt;br/&gt;
		Library EZproxy Suffix: &lt;input type=&quot;text&quot; id=&quot;link1&quot; size=&quot;31&quot; placeholder=&quot;e.g. ezproxy.abc.edu&quot;/&gt;
		&lt;em&gt;e.g. ezproxy.abc.edu
		&lt;br/&gt;
		&lt;button id=&quot;b1&quot;&gt;Customize&lt;/button&gt;&lt;/em&gt;
	&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Copy the following into a text editor and save it as an html file.&lt;/strong&gt;&lt;/p&gt;
	&lt;ul&gt;
		&lt;li&gt;Open the file in a web browser and drag your link to the bookmark toolbar.&lt;/li&gt;
	&lt;/ul&gt;	
	&lt;p id=&quot;result1&quot; style=&quot;color:#F7704F;&quot;&gt;**Customized code will appear here.**&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;If you want to make any changes to the code:&lt;/strong&gt;&lt;/p&gt;
	&lt;textarea rows=&quot;10&quot; cols=&quot;60&quot;&gt;&lt;/textarea&gt;

	&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){	
	  $(&quot;#b1&quot;).click(function(){
		var pre=&quot;&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;a href=&amp;quot;javascript:(function(){ var hst=location.host; var path=location.pathname; var srch=location.search; var newlink=&#039;http://&#039;+hst&quot;;
		var link1=$(&#039;#link1&#039;).val();
		var post=&quot;&#039;+path+srch; window.open(newlink); })();&quot;&gt;&quot;;
	  	var title=$(&quot;#title1&quot;).val();
	  	var end=&quot;&amp;lt;/a&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt;&quot;;
	  	var final=$(&#039;&lt;div /&gt;&#039;).html(pre+&quot;+&#039;.&quot;+link1+post+title+end).text()
	  	$(&#039;#result1&#039;).text(final);
	    $(&#039;textarea&#039;).val(final);
	  });
	}); // doc ready
	&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</pre>
<p>That &#8216;customize&#8217; part is done here with several lines of JQuery. You will notice that the process is quite similar to what I did in my first example. In lines 4-8, I am just stitching together a bunch of text strings to spit out the whole code in the text area eventually when the &#8216;Customize&#8217; button is clicked. All special characters used in HTML tags such as &#8216;&lt;&#8217; and &#8216;&gt;&#8217; have been changed to <a href="http://www.w3schools.com/html/html_entities.asp#gsc.tab=0">html enities</a>. In line 9, I am taking the entire string saved in the variable end &#8211;<em>I hope you name your variables a little more carefully than I do!</em>&#8211;  and adding it to an empty div so that the string would be set as the inner HTML property of that div. And then I retrieve it using the .text() method. The result is <a href="http://stackoverflow.com/questions/5796718/html-entity-decode">the HTML code with the html entities decoded.</a></p>
<pre class="brush: javascript; gutter: true">&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){	
	  $(&quot;#b1&quot;).click(function(){
		var pre=&quot;&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt; &amp;lt;a href=&amp;quot;javascript:(function(){ var hst=location.host; alert(hst); var path=location.pathname; var srch=location.search; var newlink=&#039;http://&#039;+hst&quot;;
		var link1=$(&#039;#link1&#039;).val();
		var post=&quot;&#039;+path+srch; window.open(newlink); })();&quot;&gt;&quot;;
	  	var title=$(&quot;#title1&quot;).val();
	  	var end=&quot;&amp;lt;/a&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt;&quot;;
	  	var final=$(&#039;&lt;div /&gt;&#039;).html(pre+&quot;+&#039;.&quot;+link1+post+title+end).text()
	  	$(&#039;#result1&#039;).text(final);
	    $(&#039;textarea&#039;).val(final);
	  });
	}); // doc ready
&lt;/script&gt;</pre>
<p>Not too bad, right? I hope these examples show how just a few or several lines of code can be used to solve your practical problems at work. Coding is there for you to automate time-consuming and/or repetitive tasks.</p>
<h5>3. EZproxy bookmarklet generator &#8211; Shorter version</h5>
<p>There is a simpler way to create a EZproxy bookmarklet than the one sketched above. If you simply add EZproxy prefix in front of the entire url of the page where a user is is, you achieve the same result. In this case, you do not have to break the url with host, pathname, search string, etc.</p>
<pre class="brush: html; gutter: true">&lt;a href=&quot;javascript:void(location.href=%22http://ezproxy.fiu.edu/login?url=%22+location.href)&quot;&gt;Full-Text from FIU Library&lt;/a&gt;</pre>
<p>Here are the code for this much simpler EZproxy bookmarklet and the bookmarklet generator. If you know the prefix of you library&#8217;s EZproxy prefix, you can make one for your library.</p>
<ul>
<li><a href=" http://htmlpreview.github.com/?https://github.com/bohyunkim/examples/blob/master/ezproxy_bookmarklet_generator.html">EZproxy bookmarklet generator &#8211; Shorter version</a></li>
<li><a href="https://github.com/bohyunkim/examples/blob/master/ezproxy_bookmarklet_generator.html">Code</a></li>
</ul>
<p>So there are many ways to get the same thing done. Some are more elegant and some are less so. Usually a shorter one is a more elegant solution. The lesson is that you usually get to the most elegant solution after coming up with many less elegant solutions first.</p>
<p>Do you have a problem that can be solved by creating several lines of code? Have you ever solved a practical problem using a bit of code? Share your experience in the comments!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3098</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Making Your Website Accessible Part 3: Content WCAG Compliance</title>
		<link>http://acrl.ala.org/techconnect/?p=3106</link>
		<comments>http://acrl.ala.org/techconnect/?p=3106#comments</comments>
		<pubDate>Thu, 04 Apr 2013 13:10:20 +0000</pubDate>
		<dc:creator>Cynthia Ng</dc:creator>
				<category><![CDATA[library design]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[a11y]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[WCAG]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=3106</guid>
		<description><![CDATA[Welcome to part 3 of the web accessibility series. While part 1 explained a bit about web accessibility and the web consortium accessibility guidelines (WCAG) and part 2 covered implementing WCAG on the development side, part 3 will cover the content side of things. The main goal is that you walk away with a set [...]]]></description>
				<content:encoded><![CDATA[<p>Welcome to part 3 of the web accessibility series. While <a title="Making Your Website Accessible Part 1: understanding WCAG" href="http://acrl.ala.org/techconnect/?p=2020">part 1</a> explained a bit about web accessibility and the web consortium accessibility guidelines (WCAG) and <a title="Making Your Website Accessible Part 2: Implementing WCAG" href="http://acrl.ala.org/techconnect/?p=2511">part 2</a> covered implementing WCAG on the development side, part 3 will cover the content side of things.</p>
<p>The main goal is that you walk away with a set of guidelines you can give to staff. I&#8217;ll start with the easier stuff that apply to all staff that have access to editing content, and then I&#8217;ll move on to more complicated content, namely media and forms, where the guidelines may be for technical staff either for content creation or for evaluating add-ons/plugins.</p>
<h5>Headers</h5>
<p>Use headings 1-6 to structure information so people using assistive technologies can navigate web pages easier (<a href="http://www.w3.org/TR/WCAG20/#navigation-mechanisms-descriptive">2.4.6</a>). If your page were displayed with only headers or with headers and content indented, would it make sense? Will your headers be in the right place? Many screen readers and tools use an “Outline View”, which shows only the headings of a page.</p>
<p>Header 1 is the Title of the Webpage<br />
Header 2 is a Subtopic of the Webpage<br />
Header 3 is a Specific Sub-topic of Header 2 (and 1)<br />
Another Header 2 would be a Subtopic of Header 1<br />
(but separate from the  first Header 2)</p>
<p>Example:</p>
<pre class="brush: html; gutter: false">&lt;h1&gt;E-Resources in Engineering&lt;/h1&gt; = title of your page.
  &lt;h2&gt;Standards and Codes&lt;/h2&gt; = topic 1
    &lt;h3&gt;International Standards Organization&lt;/h3&gt; = 1st subtopic of topic 1
    &lt;h3&gt;Canadian Standards Association&lt;/h3&gt; = 2nd subtopic of h2 topic 1
  &lt;h2&gt;Journal Databases&lt;/h2&gt; = topic 2
    &lt;h3&gt;Compendex&lt;/h3&gt; = subtopic of topic 2</pre>
<p>Enter your HTML or the URL of your page into <a href="http://gsnedders.html5.org/outliner/">HTML5 Outliner</a> to see an outline view.</p>
<h5>Links</h5>
<p>The text for every link should be descriptive (<a href="http://www.w3.org/TR/WCAG20/#navigation-mechanisms-refs">2.4.4</a>) and unique (within a single page). Imagine there was no other text around it (except the title of the page). Would you understand what that link is for? Many assistive technologies have a &#8220;links only&#8221; option for viewing.</p>
<p>While many CMS provide the option to add additional text to a link through the title attribute (and is described as a sufficient technique, <a href="http://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/H33">H33</a>), the title attribute is generally not read by screen readers <sup class='footnote'><a href='#fn-3106-1' id='fnref-3106-1' onclick='return fdfootnote_show(3106)'>1</a></sup> as reading the title attribute on links (and images) is off by default. <sup class='footnote'><a href='#fn-3106-2' id='fnref-3106-2' onclick='return fdfootnote_show(3106)'>2</a></sup></p>
<h5>Text in a Foreign Language</h5>
<p>While each page should already be marked with a &#8216;default&#8217; language (<a href="http://www.w3.org/TR/WCAG20/#meaning-doc-lang-id">3.1.1</a>), chunks of text (e.g. quotes, titles) in another language should be marked (<a href="http://www.w3.org/TR/WCAG20/#meaning-other-lang-id">3.1.2</a>) with the <a href="http://www.w3.org/html/wg/drafts/html/master/dom.html#the-lang-and-xml:lang-attributes">&#8216;lang&#8217; attribute</a> and the appropriate <a href="http://www.ietf.org/rfc/bcp/bcp47.txt">language code</a>, which can be applied to any HTML element. <sup class='footnote'><a href='#fn-3106-3' id='fnref-3106-3' onclick='return fdfootnote_show(3106)'>3</a></sup></p>
<h5>Tables</h5>
<p>Only use tables for information and data that should be presented in a tabular format. For example, a calendar, a list of contact information, or data sets should be presented in a table (<a href="http://www.w3.org/TR/WCAG20/#content-structure-separation-programmatic">1.3.1</a>). Tables should not be used for layout, such as presenting content in columns.</p>
<p>If you need to use a table, then the information must be presented in a way that is accessible to users with disabilities and allows the table information to still be understood by the user even if they can’t see the table’s layout.</p>
<p>Elements</p>
<p>&lt;table&gt; : This element defines an HTML table<br />
&lt;tr&gt; : This element defines a table row<br />
&lt;th&gt; : This element defines a table header and should have the appropriate scope<br />
&lt;td&gt; : This element defines a table cell<br />
&lt;caption&gt; : This element identifies the table and acts as a title for the table. A caption is shown to all.</p>
<p>Example using Code for a Simple Table (<a href="http://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/H63">Technique H63</a>)</p>
<pre class="brush: html; gutter: false">&lt;table&gt;
  &lt;caption&gt;Overdue Fines for Library Materials On Loan&lt;/caption&gt;
  &lt;tr&gt;
    &lt;th scope=&quot;col&quot;&gt;Type of Item&lt;/th&gt;
    &lt;th scope=&quot;col&quot;&gt;Amount per Day&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Books&lt;/td&gt;
    &lt;td&gt;$0.50&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;DVDs&lt;/td&gt;
    &lt;td&gt;$1.00&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;</pre>
<p>For examples of more complex tables, take a look at <a href="http://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/H43">Technique H43</a>.</p>
<h5>Images</h5>
<ul>
<li><strong>Alternate Text</strong></li>
</ul>
<p>When you include image elements on your website, you also need to include alternate or alt text, which allows you to include descriptive information about the image. While the text is not visible to most users, assistive technologies will read the alternate text as a description of the image, so write concisely, while still providing an accurate description of the image.</p>
<p>However, if your image has been included for purely decorative purposes, leave the alternate text empty. Assistive technology will ignore the image completely.</p>
<p>For example:</p>
<pre class="brush: html; gutter: false">&lt;img src=&quot;/6th-floorplan.jpg&quot; alt=&quot;floor plan of the library&#039;s 6th floor&quot;&gt;</pre>
<p>If decorative only:</p>
<pre class="brush: html; gutter: false">&lt;img src=&quot;/example.jpg&quot; alt=&quot;&quot;&gt;</pre>
<ul>
<li><strong>Title for Images</strong></li>
</ul>
<p>The title field allows you to provide additional information about an image in addition to the alternate text (meaning the title should not repeat alternate text). The title will also typically appear if users hover over an image with a title. However, as already noted, the title is typically not seen or read, so the use of title is discouraged <sup class='footnote'><a href='#fn-3106-4' id='fnref-3106-4' onclick='return fdfootnote_show(3106)'>4</a></sup>.</p>
<ul>
<li><strong>Use Text Whenever Possible</strong></li>
</ul>
<p>Basically, don&#8217;t use an image of text instead of just text &#8211; use CSS instead (<a href="http://www.w3.org/TR/WCAG20/#visual-audio-contrast-text-presentation">1.4.5</a>). The one exception is for logos.</p>
<div id="attachment_3107" class="wp-caption aligncenter" style="width: 600px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/stylized-font-example.png"><img class="size-large wp-image-3107" alt="The logo of this website is an image, but all other text you see in this screenshot is just text" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/stylized-font-example-1024x466.png" width="590" height="268" /></a><p class="wp-caption-text">The logo of this website is an image, but all other text you see in this screenshot is just text</p></div>
<ul>
<li><strong>Meaning through Text</strong></li>
</ul>
<p>In a similar vein, understanding information and instructions should not be dependent on any sensory characteristics, such as sound, colour, or shape (<a href="http://www.w3.org/TR/WCAG20/#content-structure-separation-understanding">1.3.3</a>, <a href="http://www.w3.org/TR/WCAG20/#visual-audio-contrast-without-color">1.4.1</a>). Think about it as: your message should be understood in text-only mode.</p>
<h5>Audio/Video, Animations &amp; Interactions</h5>
<ul>
<li><strong>Autoplay</strong></li>
</ul>
<p>In general, audio and visual content should not play automatically. Instead, users should be able to hit a play button when they are ready for the content. Audio that autoplays for more than 3 seconds <em>must</em> have a pause/stop control or independent volume control (<a href="http://www.w3.org/TR/WCAG20/#visual-audio-contrast-dis-audio">1.4.2</a>).</p>
<ul>
<li><strong>Alternatives to Media</strong></li>
</ul>
<p>All non-text content, including audio and visual materials should have an alternate (<a href="http://www.w3.org/TR/WCAG20/#text-equiv-all">1.1.1</a>), typically a text transcript and/or descriptive audio (<a href="http://www.w3.org/TR/WCAG20/#media-equiv-av-only-alt">1.2.1</a>, <a href="http://www.w3.org/TR/WCAG20/#media-equiv-audio-desc">1.2.3</a>). At the AA level, WCAG requires audio descriptions for all videos as well (<a href="http://www.w3.org/TR/WCAG20/#media-equiv-audio-desc-only">1.2.5</a>), but the Ontario legislation (AODA) excludes it.</p>
<p style="text-align: center;"><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='500' height='312' src='http://www.youtube.com/embed/PCZqKxQME6o?version=3&#038;rel=0&#038;fs=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' frameborder='0'></iframe></span>Example of Audio Description in a Movie</p>
<p>Much like images, if the audio/video is actually an alternate to text, such as in a tutorial where an explanation is already fully explained in text form, then no alternate is required.</p>
<ul>
<li><strong>Captions</strong></li>
</ul>
<p>All audio/video should have captions (aka subtitles) again unless the actual audio/video is an alternative to text (<a href="http://www.w3.org/TR/WCAG20/#media-equiv-captions">1.2.2</a>). At the AA level, WCAG requires captions for live (streaming) audio/video as well (<a href="http://www.w3.org/TR/WCAG20/#media-equiv-real-time-captions">1.2.4</a>), but this is the one other exception to the AODA.</p>
<ul>
<li><strong>Timing</strong></li>
</ul>
<p>Timing issues are particularly important in media and interactive elements, although it applies to any session based activity, such as bookings and forms. The basic idea is that anything that is on a timer can be extended and in some cases, users have to be warned (<a href="http://www.w3.org/TR/WCAG20/#time-limits-required-behaviors">2.2.1</a>). The exceptions are when it&#8217;s in real time (e.g. auction) or it&#8217;s essential (e.g. timed quiz).</p>
<div id="attachment_3111" class="wp-caption aligncenter" style="width: 558px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/timeout-example.png"><img class=" wp-image-3111 " alt="Toronto Public Library gives this session time out warning to users" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/timeout-example.png" width="548" height="142" /></a><p class="wp-caption-text">Toronto Public Library gives this session time out warning to users</p></div>
<ul>
<li><strong>Moving, Blinking, &amp; Flashing</strong></li>
</ul>
<p>While this applies to websites in general, particularly for interactive elements or animations, the simplified version is that anything that starts automatically should have an accessible mechanism to pause, stop, or hide it (<a href="http://www.w3.org/TR/WCAG20/#time-limits-pause">2.2.2</a>). Additionally, nothing on the website should flash more than 3 times within 1 second so as not to cause seizures (<a href="http://www.w3.org/TR/WCAG20/#seizure-does-not-violate">2.3.1</a>).</p>
<div id="attachment_3112" class="wp-caption aligncenter" style="width: 280px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/epilepsy-example.png"><img class=" wp-image-3112 " alt="WARNING: Epilepsy inducing website(please don't ever do anything like this, ever)" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/epilepsy-example-300x212.png" width="270" height="191" /></a><p class="wp-caption-text">WARNING: Epilepsy inducing website<br />(please don&#8217;t ever do anything like this, ever)</p></div>
<ul>
<li><strong>Keyboard Accessible</strong></li>
</ul>
<p>Again, this applies to the website as a whole, but particularly with more interactive elements, everything on a website should have the ability to be used through a keyboard (<a href="http://www.w3.org/TR/WCAG20/#keyboard-operation-keyboard-operable">2.1.1</a>).</p>
<p>One of the major issues with web based media is that they tend to live in a Flash-based container, which is not usually accessible. (This may shortly prove to be less of a problem with accessible controls in Flash videos by default built into Flash CS6 <sup class='footnote'><a href='#fn-3106-5' id='fnref-3106-5' onclick='return fdfootnote_show(3106)'>5</a></sup>.) YouTube videos are a prime example.</p>
<p>One alternative is to provide a link to an accessible player. For YouTube videos, you can create a link that will load a video (or playlist) into an online accessible player, such as <a href="http://icant.co.uk/easy-youtube/docs/index.html">Easy YouTube Player</a> or the <a href="http://tube.majestyc.net/">Accessible Interface to YouTube</a>.</p>
<p>The other common method is to wrap the Flash object with accessible controls (see <a href="http://simplyaccessible.com/article/keyboard-accessible-youtube-controls/">Keyboard Accessible YouTube Controls</a> for example). However, wrapping an embedded video may remove existing functionality, such as full screen or volume control.</p>
<p>If you host your own videos, consider having accessible controls load for all your videos, such as using the <a href="http://wac.osu.edu/examples/jwpc/">JW Player Controls</a>.</p>
<p>I also emphasize that you should be careful to never have a keyboard trap (<a href="http://www.w3.org/TR/WCAG20/#keyboard-operation-trapping">2.1.2</a>) though this is uncommon these days. See the following section for more on keyboard accessibility.</p>
<h5>Forms</h5>
<p>Keyboard accessibility along with many guidelines talked about here may apply to any similar element in a website, but the rest of the guidelines are covered here as they are commonly related or encountered with form elements.</p>
<ul>
<li><strong>Tab Order</strong></li>
</ul>
<p>Not surprisingly, users should be tabbing through fields in the meaningful order, which is not always the same as the default browser order (<a href="http://www.w3.org/TR/WCAG20/#navigation-mechanisms-focus-order">2.4.3</a>).</p>
<div class="wp-caption aligncenter" style="width: 457px"><a href="http://www.htmlcodetutorial.com/forms/_INPUT_TABINDEX.html"><img title="tab order example" alt="annotated screenshot of an incorrect tab order on a form" src="http://www.htmlcodetutorial.com/graphics/taborder1.gif" width="447" height="166" /></a><p class="wp-caption-text">Default order based on the code, which is obviously confusing to a user.</p></div>
<p>To fix the (above) problem, you can use <a href="http://www.w3.org/html/wg/drafts/html/master/editing.html#sequential-focus-navigation-and-the-tabindex-attribute">tab index</a> attribute.</p>
<p>For simplicity, I&#8217;ve left out some coding such as the form attributes.<br />
<span id="formexample"></span></p>
<pre class="brush: html; gutter: false">&lt;form&gt;
  &lt;label for=&quot;realname&quot;&gt;name: &lt;input id=&quot;realname&quot; tabindex=1&gt;
  &lt;label for=&quot;comments&quot;&gt;comments
  &lt;textarea id=&quot;comments&quot; cols=25 rows=5 tabindex=4&gt;&lt;/textarea&gt;
  &lt;label for=&quot;email&quot;&gt;email: &lt;input id=&quot;email&quot; tabindex=2&gt;
  &lt;label for=&quot;dep&quot;&gt;department: &lt;select id=&quot;dep&quot; tabindex=3&gt;
  &lt;option value=&quot;&quot;&gt;...&lt;/select&gt;
&lt;/form&gt;</pre>
<ul>
<li><strong>On Focus &amp; Input Behaviour</strong></li>
</ul>
<p>Whenever an element can take input or interaction from the user, the current focus should be visible (<a href="http://www.w3.org/TR/WCAG20/#navigation-mechanisms-focus-visible">2.4.7</a>). The most basic example is the border/shadow effect when your cursor is in a text box, which is already built into the latest webkit browsers. (Some of the other browsers do show a minimal effect, but nothing that would pass the colour contract guidelines.)</p>
<div class="wp-caption aligncenter" style="width: 530px"><a href="http://monstertut.com/wp-content/uploads/2012/04/orange-border-chrome-input.gif"><img alt="screenshot of default field focus styling in Chrome and Safari" src="http://monstertut.com/wp-content/uploads/2012/04/orange-border-chrome-input.gif" width="520" height="215" /></a><p class="wp-caption-text">Source: http://monstertut.com/2012/04/remove-outline-input-forms-chrome-onfocus/</p></div>
<p>Since the default behaviour only covers the webkit browser, some simple CSS will do the trick.<sup class='footnote'><a href='#fn-3106-6' id='fnref-3106-6' onclick='return fdfootnote_show(3106)'>6</a></sup></p>
<pre class="brush: css; gutter: false">input:focus, textarea:focus, select:focus {
  border: 2px solid #8AADE1;
  box-shadow: 0 0 3px #8AADE1; /* not supported pre-IE9, but border still applies */
  outline: medium none;
}</pre>
<p>Putting focus on or entering something into an element should also not <a href="http://www.w3.org/TR/2008/REC-WCAG20-20081211/#context-changedef">change the context</a> (<a href="http://www.w3.org/TR/WCAG20/#consistent-behavior-receive-focus">3.2.1</a>, <a href="http://www.w3.org/TR/WCAG20/#consistent-behavior-unpredictable-change">3.2.2</a>). Finally, submission should be manual, not automatic (though I&#8217;ve never encountered an automatic one).</p>
<ul>
<li><strong>Avoiding and Correcting Mistakes</strong></li>
</ul>
<p>Appropriate labels (and possibly instructions) should always go along with user input (<a href="http://www.w3.org/TR/WCAG20/#minimize-error-cues">3.3.2</a>). Form elements in particular should generally each have a <a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#the-label-element">label element</a> attached (though not used for buttons <sup class='footnote'><a href='#fn-3106-7' id='fnref-3106-7' onclick='return fdfootnote_show(3106)'>7</a></sup>), such as in the <a href="#formexample">basic code example above</a>.</p>
<p>Any errors in input should always be identified and described (<a href="http://www.w3.org/TR/WCAG20/#minimize-error-identified">3.3.1</a>), with corrections suggested whenever possible (<a href="http://www.w3.org/TR/WCAG20/#minimize-error-suggestions">3.3.3</a>). For business transactions, particularly related financial or legal transactions, all data should be given to the user to be reviewed first (<a href="http://www.w3.org/TR/WCAG20/#minimize-error-reversible">3.3.4</a>).</p>
<p>With HTML5, marking required elements is now simpler than ever with the <a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#the-required-attribute">required attribute</a>, such as:</p>
<pre class="brush: html; gutter: false">&lt;input type=&quot;text&quot; name=&quot;name&quot; required&gt;</pre>
<p>The browser will automatically identify whether the field was left blank and inform the user.</p>
<p><a href="http://webdesign.tutsplus.com/tutorials/site-elements/bring-your-forms-up-to-date-with-css3-and-html5-validation/"><img alt="screenshot of popup when field required in chrome, firefox, and opera" src="http://d3pr5r64n04s3o.cloudfront.net/tuts/214_html5_form_validation/tutorial/images/submission_error.png" width="540" height="360" /></a></p>
<p>Similarly, there are now more <a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#states-of-the-type-attribute">input types</a> you can use for browser-based form validation, such as the <a href="http://www.w3.org/html/wg/drafts/html/master/forms.html#e-mail-state-%28type=email%29">email input type</a>:</p>
<pre class="brush: html; gutter: false">&lt;input type=&quot;email&quot; id=&quot;user_email&quot;&gt;</pre>
<h5>Captcha</h5>
<p>Do not use recaptcha. It irks me to no ends that recaptcha claims it is accessible, because they provide an audio alternative. While that&#8217;s true, next time you encounter one, try listening to it.</p>
<p>The alternative is to use a captcha that is more accessible. The wikipedia article on captcha can give you some ideas and example. Personally, I like the simple questions, such as &#8216;If you write 5 followed directly by 2, what number did you write?&#8217;</p>
<h5>HTML5 Accessibility Support</h5>
<p>Unfortunately, accessibility support for HTML5 is only partially there. Even basic elements, such as header and footer, are not supported across browsers. Based on various sources that I have read, for assistive technology purposes, your website should be accessible through the latest IE and Firefox on Windows, and Safari on OSX. Check out the <a href="http://html5accessibility.com/">HTML5 Accessibility website</a> to see which HTML5 elements and attributes have accessibility support in the various browsers.</p>
<p>In the mean time, while in <a href="http://cynng.wordpress.com/2013/01/22/making-your-website-accessible-part-2-implementing-wcag-into-the-structure-layout/">part 2</a>, I mentioned that <a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA</a> should only be used for custom interfaces, since not all browsers support all the new HTML5 elements and attributes, it has been suggested to use ARIA roles during this transitional phase. If you find something you&#8217;re using isn&#8217;t supported in the recommended browsers, check out <a href="https://dvcs.w3.org/hg/aria-unofficial/raw-file/tip/index.html">Using WAI-ARIA in HTML</a>, which talks about which ARIA role you should use.</p>
<h5>Conclusion</h5>
<p>This is the last of the series. I&#8217;ve made sure to cover all the guidelines, and while I haven&#8217;t specifically covered scripting, there&#8217;s almost no difference. Flash, Silverlight, and PDF are fairly different things, so I point you to the <a href="http://www.w3.org/WAI/WCAG20/quickref/">WCAG guidelines</a> and other resources (see the next section).</p>
<p>Awareness of web accessibility has increased, but we can do more, a lot more, and there is no better place to start than with our own institution&#8217;s website. While web technologies are forging ahead and making it easier for people to interact with the web, adaptive or assistive technologies are frequently playing catch up, so we need to be aware of what works for everyone and what doesn&#8217;t. Make the web friendlier, for everyone.</p>
<h5>Resources &amp; More Information</h5>
<p>If you want more information and resources, check out:</p>
<ul>
<li><a href="http://www.paciellogroup.com/blog/">The Paciello Group Blog</a> – a lot of great articles focused on web accessibility</li>
<li><a href="http://a11yproject.com/checklist.html">Web Accessibility Checklist</a> – site also has a number of easy to digest articles</li>
<li><a href="http://squizlabs.github.com/HTML_CodeSniffer/">HTML Codesniffer</a> &#8211; great bookmarklet to audit any page you&#8217;re viewing (WCAG and Section 508 supported)</li>
<li><a title="Making Your Website Accessible Part 2: Implementing WCAG" href="http://acrl.ala.org/techconnect/?p=2511">Part 2 of this series</a> &#8211; includes tools to check accessibility and a (partial) list of accessible UI libraries</li>
</ul>
<h5></h5>
<h5>Notes</h5>
<div class='footnotes' id='footnotes-3106'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-3106-1'><a href="http://blog.silktide.com/2013/01/things-learned-pretending-to-be-blind-for-a-week/">Things Learned Pretending to be Blind for a Week</a> <span class='footnotereverse'><a href='#fnref-3106-1'>&#8617;</a></span></li>
<li id='fn-3106-2'><a href="http://www.rnib.org.uk/professionals/webaccessibility/wacblog/Lists/Posts/Post.aspx?id=38">Title Attributes</a> <span class='footnotereverse'><a href='#fnref-3106-2'>&#8617;</a></span></li>
<li id='fn-3106-3'><a href="http://www.w3.org/TR/html5/dom.html#the-lang-and-xml:lang-attributes">The lang attribute</a> <span class='footnotereverse'><a href='#fnref-3106-3'>&#8617;</a></span></li>
<li id='fn-3106-4'><a href="http://www.w3.org/html/wg/drafts/html/master/dom.html#the-title-attribute">HTML Title attribute</a> <span class='footnotereverse'><a href='#fnref-3106-4'>&#8617;</a></span></li>
<li id='fn-3106-5'><a href="https://www.adobe.com/accessibility/products/flash/video.html">Adobe Flash accessibility design guidelines</a> <span class='footnotereverse'><a href='#fnref-3106-5'>&#8617;</a></span></li>
<li id='fn-3106-6'><a href="https://developer.mozilla.org/en-US/docs/CSS/box-shadow">box-shadow property</a> <span class='footnotereverse'><a href='#fnref-3106-6'>&#8617;</a></span></li>
<li id='fn-3106-7'><a href="http://www.w3.org/TR/2012/NOTE-WCAG20-TECHS-20120103/H44">Technique H44</a> <span class='footnotereverse'><a href='#fnref-3106-7'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=3106</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revisiting PeerJ</title>
		<link>http://acrl.ala.org/techconnect/?p=2912</link>
		<comments>http://acrl.ala.org/techconnect/?p=2912#comments</comments>
		<pubDate>Mon, 01 Apr 2013 13:25:39 +0000</pubDate>
		<dc:creator>Margaret Heller</dc:creator>
				<category><![CDATA[publication]]></category>
		<category><![CDATA[Scholarly Communication]]></category>
		<category><![CDATA[academic journals]]></category>
		<category><![CDATA[open peer review]]></category>
		<category><![CDATA[PeerJ]]></category>
		<category><![CDATA[publishing]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=2912</guid>
		<description><![CDATA[A few months ago as part of a discussion on open peer review, I described the early stages of planning for a new type of journal, called PeerJ. Last month on February 12 PeerJ launched with its first 30 articles. By last week, the journal had published 53 articles. There are a number of remarkable [...]]]></description>
				<content:encoded><![CDATA[<p>A few months ago as <a title="blah" href="http://acrltechconnect">part of a discussion on open peer review,</a> I described the early stages of planning for a new type of journal, called <a title="PeerJ" href="http://peerj.com"><em>PeerJ</em></a>. Last month on February 12 <em>PeerJ</em> launched with its <a title="The Launch of PeerJ" href="http://blog.peerj.com/post/42920112598/launch-of-peerj">first 30 articles</a>. By last week, the journal had published 53 articles. There are a number of remarkable attributes of the journal so far, so in this post I want to look at what <em>PeerJ</em> is actually doing, and some lessons that academic libraries can take away&#8211;particularly for those who are getting into publishing.</p>
<h5>What PeerJ is Doing</h5>
<p>On the opening day blog post (since there are no editorials or issues in <em>PeerJ</em>, communication from the editors has to be done via blog post <sup class='footnote'><a href='#fn-2912-1' id='fnref-2912-1' onclick='return fdfootnote_show(2912)'>1</a></sup>), the PeerJ team outlined their mission under four headings: to make their content open and help to make that standard practice, to practice constant innovation, to &#8220;serve academia&#8221;, and to make this happen at minimal cost to researchers and no cost to the public. The list of <a href="https://peerj.com/academic-boards/advisors/" target="_blank">advisory board</a> and <a href="https://peerj.com/academic-boards/editors/">academic editors</a> is impressive&#8211;it is global and diverse, and includes some big names and Nobel laureates. To someone judging the quality of the work likely to be published, this is a good indication. The <a href="https://peerj.com/search/?q=&amp;type=member">members of PeerJ range in disciplines</a>, with the majority in Molecular Biology. To submit and/or publish work <a href="https://peerj.com/pricing/">requires a fee</a>, but there is a free plan that allows one pre-print to be posted on the forthcoming <em>PeerJ PrePrints. </em></p>
<p><em>PeerJ&#8217;s</em> publication methods are based on <em>PLoS ONE</em>, which publishes articles based on subjective scientific and methodological soundness rather with no emphasis placed on subjective measures of novelty or interest (<a href="https://peerj.com/about/editorial-criteria/" target="_blank">see more on this</a>). Like all peer-reviewed journals, articles are sent to an academic editor in the field, who then sends the article to peer reviewers. Everything is kept confidential until the article actually is published, but authors are free to talk about their work in other venues like blogs.</p>
<h5>Look and Feel</h5>
<div id="attachment_3076" class="wp-caption alignleft" style="width: 210px"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/2013-02-19-11.37.03.png"><img class="size-medium wp-image-3076" alt="PeerJ on an iPhone size screen" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/2013-02-19-11.37.03-200x300.png" width="200" height="300" /></a><p class="wp-caption-text">PeerJ on an iPhone size screen</p></div>
<p>There are several striking dissimilarities between <em>PeerJ</em> and standard academic journals. The home page of the journal emphasizes striking visuals and is responsive to devices, so the large image scales to a small screen for easy reading. The &#8220;timeline&#8221; display emphasizes new and interesting content. <sup class='footnote'><a href='#fn-2912-2' id='fnref-2912-2' onclick='return fdfootnote_show(2912)'>2</a></sup> The code they used to make this all happen is available openly on the <a href="https://github.com/PeerJ">PeerJ Github account</a>. The design of the page reflects best practices for non-profit web design, as described by the non-profit social media guide <a href="http://nonprofitorgs.wordpress.com/2013/03/18/a-short-recent-history-of-nonprofit-website-design-and-online-fundraising/">Nonprofit Tech 2.0</a>. The page tells a story, makes it easy to get updates, works on all devices, and integrates social media. The design of the page has changed iteratively even in the first month to reflect the realities of what was actually being published and how people were accessing it. <sup class='footnote'><a href='#fn-2912-3' id='fnref-2912-3' onclick='return fdfootnote_show(2912)'>3</a></sup> PDFs of articles were designed to be readable on screens, especially tablets, so rather than trying to fit as much text as possible on one page as many PDFs are designed, they have single columns with left margins, fewer words per line, and references hyperlinked in the text. <sup class='footnote'><a href='#fn-2912-4' id='fnref-2912-4' onclick='return fdfootnote_show(2912)'>4</a></sup></p>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<h5>How Open Peer Review Works</h5>
<p>One of the most notable features of <em>PeerJ</em> is open peer review. This is not mandatory, but approximately half the reviewers and authors have chosen to participate. <sup class='footnote'><a href='#fn-2912-5' id='fnref-2912-5' onclick='return fdfootnote_show(2912)'>5</a></sup> <a href="https://peerj.com/reviews/40/" target="_blank">This article is an example</a> of open peer review in practice. You can read the original article, the (in this case anonymous) reviewer&#8217;s comments, the editors comments and the author&#8217;s rebuttal letter. Anyone who has submitted an article to a peer reviewed journal before will recognize this structure, but if you have not, this might be an exciting glimpse of something you have never seen before. As a non-scientist, I personally find this more useful as a didactic tool to show the peer review process in action, but I can imagine how helpful it would be to see this process for articles about areas of library science in which I am knowledgeable.</p>
<p>With only 53 articles and in existence for such a short time, it is difficult to measure what impact open peer review has on articles, or to generalize about which authors and reviewers choose an open process. So far, however, <em>PeerJ</em> reports that several authors <a href="http://blog.peerj.com/post/45340534713/peerj-is-fast" target="_blank">have been very positive</a> about their experience publishing with the journal. The speed of review is very fast, and reviewers have been constructive and kind in their language. One author goes into more detail <a href="http://edaphics.blogspot.co.uk/2013/02/peerj-delivers-review-process.html" target="_blank">in his original post</a>, &#8220;One of the reviewers even signed his real name. Now, I&#8217;m not totally sure why they were so nice to me. They were obvious experts in the system that I studied &#8230;. But they were nice, which was refreshing and encouraging.&#8221; He also points out that the exciting thing about PeerJ for him is that all it requires are projects that were technically well-executed and carefully described, so that this encourages publication of negative or unexpected results, thus avoiding the file drawer effect.<sup class='footnote'><a href='#fn-2912-6' id='fnref-2912-6' onclick='return fdfootnote_show(2912)'>6</a></sup></p>
<p>This last point is perhaps the most important to note. We often talk of peer-reviewed articles as being particularly significant and &#8220;high-impact.&#8221; But in the case of <em>PeerJ</em>, the impact is not necessarily due to the results of the research or the type of research, but that it was well done. One great example of this is the article <a href="https://peerj.com/articles/53/" target="_blank">&#8220;Significant Changes in the Skin Microbiome Mediated by the Sport of Roller Derby&#8221;</a>. <sup class='footnote'><a href='#fn-2912-7' id='fnref-2912-7' onclick='return fdfootnote_show(2912)'>7</a></sup> This was a study about the transfer of bacteria during roller derby matches, and the study was able to prove its hypothesis that contact sports are a good environment in which to study movements of bacteria among people. <a href="https://peerj.com/reviews/53/" target="_blank">The (very humorous) review history indicates</a> that the reviewers were positive about the article, and felt that it had promise for setting a research paradigm. (Incidentally, one of the reviewers remained anonymous , since he/she felt that this could &#8220;[free] junior researchers to openly and honestly critique works by senior researchers in their field,&#8221; and signed the letter &#8220;Diligent but human postdoc reviewer&#8221;.) This article was published the beginning of March, and already has 2,307 unique visits to the page, and has been shared widely on social media. We can assume that one of the motivations for sharing this article was the potential for roller derby jokes or similar, but will this ultimately make the article&#8217;s long term impact stronger? This will be something to watch.</p>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<h5>What Can Academic Libraries Learn?</h5>
<p>A recent article <em>In the Library With the Lead Pipe</em> discussed the open ethos in two library publications, <em>In the Library With the Lead Pipe</em> and <em>Code4Lib Journal</em>. <sup class='footnote'><a href='#fn-2912-8' id='fnref-2912-8' onclick='return fdfootnote_show(2912)'>8</a></sup> This article concluded that more LIS publications need to open the peer review process, though the publications mentioned are not peer reviewed in the traditional sense. There are very few, if any, open peer reviewed publications in the nature of <em>PeerJ</em> outside of the sciences. Could libraries or library-related publications match this process? Would they want to?</p>
<p>I think we can learn a few things from <em>PeerJ</em>. First, the rapid publication cycle means that more work is getting published more quickly. This is partly because they have so many reviewers and so any one reviewer isn&#8217;t overburdened&#8211;and due to their membership model, it is in the best financial interests of potential future authors to be current reviewers. As <em>In the Library With the Lead Pipe</em> points out that a central academic library journal, <em>College &amp; Research Libraries</em>, is now open access and <a href="http://crl.acrl.org/content/early/recent" target="_blank">early content is available as a pre-print</a>, the pre-prints reflect content that will be published in some cases well over a year from now. A year is a long time to wait, particularly for work that looks at current technology. <em>Information Technology in Libraries (ITAL)</em>, the LITA journal is also open access and provides <a href="http://www.ala.org/lita/ital/prepub" target="_blank">pre-prints</a> as well&#8211;but this page appears to be out of date.</p>
<p>Another thing we can learn is making reading easier and more convenient while still maintaining a professional appearance and clean visuals. Blogs like <em>ACRL Tech Connect</em> and <em>In the Library with the Lead Pipe</em> deliver quality content fairly quickly, but look like blogs. Journals like the <a href="http://jlsc-pub.org/jlsc/" target="_blank">Journal of Librarianship and Scholarly Communication</a> have a faster turnaround time for review and publication (though still could take several months), but even this online journal is geared for a print world. Viewing the article requires downloading a PDF with text presented in two columns&#8211;hardly the ideal online reading experience. In these cases, the publication is somewhat at the mercy of the platform (WordPress in the former, BePress Digital Commons in the latter), but as libraries become publishers, they will have to develop platforms that meet the needs of modern researchers.</p>
<p>A question put to the <em>ACRL Tech Connect</em> contributors about preferred reading methods for articles suggests that there is no one right answer, and so the safest course is to release content in a variety of formats or make it flexible enough for readers to transform to a preferred format. A new journal to watch is <a href="http://weaveux.org/" target="_blank"><em>Weave: Journal of Library User Experience</em></a>, which will use the Digital Commons platform but present content in innovative ways. <sup class='footnote'><a href='#fn-2912-9' id='fnref-2912-9' onclick='return fdfootnote_show(2912)'>9</a></sup> Any libraries starting new journals or working with their campuses to create new journals should be aware of who their readers are and make sure that the solutions they choose work for those readers.</p>
<p>&nbsp;</p>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<p>&nbsp;</p>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<div class="csl-bib-body" style="line-height: 1.35; padding-left: 2em; text-indent: -2em;"></div>
<h5></h5>
<div class='footnotes' id='footnotes-2912'>
<div class='footnotedivider'></div>
<ol>
<li id='fn-2912-1'>“The Launch of PeerJ &#8211; PeerJ Blog.” Accessed February 19, 2013. http://blog.peerj.com/post/42920112598/launch-of-peerj. <span class='footnotereverse'><a href='#fnref-2912-1'>&#8617;</a></span></li>
<li id='fn-2912-2'>“Some of the Innovations of the PeerJ Publication Platform &#8211; PeerJ Blog.” Accessed February 19, 2013. http://blog.peerj.com/post/42920094844/peerj-functionality. <span class='footnotereverse'><a href='#fnref-2912-2'>&#8617;</a></span></li>
<li id='fn-2912-3'>http://blog.peerj.com/post/45264465544/evolution-of-timeline-design-at-peerj <span class='footnotereverse'><a href='#fnref-2912-3'>&#8617;</a></span></li>
<li id='fn-2912-4'>“The Thinking Behind the Design of PeerJ’s PDFs.” Accessed March 18, 2013. http://blog.peerj.com/post/43558508113/the-thinking-behind-the-design-of-peerjs-pdfs. <span class='footnotereverse'><a href='#fnref-2912-4'>&#8617;</a></span></li>
<li id='fn-2912-5'>http://blog.peerj.com/post/43139131280/the-reception-to-peerjs-open-peer-review <span class='footnotereverse'><a href='#fnref-2912-5'>&#8617;</a></span></li>
<li id='fn-2912-6'>“PeerJ Delivers: The Review Process.” Accessed March 18, 2013. http://edaphics.blogspot.co.uk/2013/02/peerj-delivers-review-process.html. <span class='footnotereverse'><a href='#fnref-2912-6'>&#8617;</a></span></li>
<li id='fn-2912-7'>Meadow, James F., Ashley C. Bateman, Keith M. Herkert, Timothy K. O’Connor, and Jessica L. Green. “Significant Changes in the Skin Microbiome Mediated by the Sport of Roller Derby.” <i>PeerJ</i> 1 (March 12, 2013): e53. doi:10.7717/peerj.53. <span class='footnotereverse'><a href='#fnref-2912-7'>&#8617;</a></span></li>
<li id='fn-2912-8'>Ford, Emily, and Carol Bean. “Open Ethos Publishing at Code4Lib Journal and In the Library with the Lead Pipe.” <i>In the Library with the Lead Pipe</i> (December 12, 2012). http://www.inthelibrarywiththeleadpipe.org/2012/open-ethos-publishing/. <span class='footnotereverse'><a href='#fnref-2912-8'>&#8617;</a></span></li>
<li id='fn-2912-9'>Personal communication with Matthew Reidsma, March 19, 2013. <span class='footnotereverse'><a href='#fnref-2912-9'>&#8617;</a></span></li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=2912</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Local Dev Environments For Newbies Part 1: AMP on Mac OSX</title>
		<link>http://acrl.ala.org/techconnect/?p=2968</link>
		<comments>http://acrl.ala.org/techconnect/?p=2968#comments</comments>
		<pubDate>Mon, 25 Mar 2013 13:00:50 +0000</pubDate>
		<dc:creator>Meghan Frazer</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[beginners]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[web server]]></category>

		<guid isPermaLink="false">http://acrl.ala.org/techconnect/?p=2968</guid>
		<description><![CDATA[There are many cases where having a local development environment is helpful and it is a relatively straightforward thing to do, even if you are new to development.  However, the blessing and the curse is that there are many, many tutorials out there attempting to show you how.  This series of posts will aim to [...]]]></description>
				<content:encoded><![CDATA[<p>There are many cases where having a local development environment is helpful and it is a relatively straightforward thing to do, even if you are new to development.  However, the blessing and the curse is that there are many, many tutorials out there attempting to show you how.  This series of posts will aim to walk through some basic steps with detail, as well as pass on some tips and tricks for setting up your own local dev box.</p>
<p>First, what do I mean by a local development environment?  This is a setup on your computer which allows you to code and tweak and test in a safe environment.  It&#8217;s a great way to hammer on a new application with relatively low stakes.  I am currently installing dev environments for two purposes: to test some data model changes I want to make on an existing Drupal site and to learn a new language so I can contribute to an application.  For the purposes of this series, we&#8217;re going to focus on the AMP stack &#8211; Apache, MySQL and PHP &#8211; and how to install and configure those systems for use in web application development.</p>
<p>Apache is the web server which will serve the pages of your website or application to a browser.  You may hear Apache in conjunction with lots of other things &#8211; Apache Tomcat, Apache Solr &#8211; but generally when someone references just Apache, it&#8217;s the web server.  The full name of the project is the <a href="http://httpd.apache.org/">Apache HTTP Server Project</a>.</p>
<p><a href="http://php.net/">PHP</a> is a scripting language widely used in web development.  <a href="http://dev.mysql.com/downloads/">MySQL</a> is a database application also frequently used in web development.  &#8221;Stack&#8221; refers to the combination of several components needed to run a web application.  The AMP stack is the base for many web applications and content management systems, including Drupal and WordPress.</p>
<p>You may have also seen the AMP acronym preceded by an L, M or W.  This merely stands for the operating system of choice &#8211; Linux, Mac or Windows.  This can also refer to installer packages that purport to do the whole installation for you, like WAMP or MAMP.  Employing the installer packages can be useful, depending on your situation and operating system.  The <a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> stack, distributed by Apache Friends, is another example of an installer package designed to set up the whole stack for you.  For this tutorial though, we&#8217;ll step through each element of the stack, instead of using a stack installer.</p>
<p>So, why do it yourself if there are installers?  To me, it takes out the mystery of how all the pieces play together and is a good way to learn about what&#8217;s going on behind the scenes.  When working on Windows, I will occasionally use a .msi installer for an individual component to make sure I don&#8217;t miss something.  But installing and configuring each component individually is actually helpful.</p>
<h5>Tips</h5>
<p>Before we begin, let&#8217;s look at some tips:</p>
<ul>
<li>You will need administrative rights to the computer on which you&#8217;re installing.</li>
<li>Don&#8217;t be afraid of the command line.  There are lots of tutorials around the web on how to use the basic commands &#8211; for both <a href="http://mac.tutsplus.com/tutorials/terminal/10-terminal-commands-that-every-mac-user-should-know/">Mac</a> (based on UNIX) and <a href="http://www.computerhope.com/issues/chusedos.htm">Windows</a>.  But, you don&#8217;t need to be an expert to set up a dev environment.  Most tutorials give the exact commands you need.</li>
<li>Try, if possible, to block off a chunk of time to do this.  Going through all the steps may take awhile, from an hour to an afternoon, especially if you hit a snag.  Several times during my own process, I had to step away from it because of a crisis or because it was the end of the day.  When I was able to come back later, I had some trouble remembering where I left off or the configuration options I had chosen.  If you do have to walk away, write down the last thing you did.</li>
<li>When you&#8217;re looking for a tutorial, Google away.  Search for the elements of your stack plus your OS, like &#8220;Apache MySQL PHP Mac OSX&#8221;.  You&#8217;ll find lots, and probably end up referencing more than one.  Use your librarian skills: is the tutorial recent?  Does it appear to be from a reputable source?  If it&#8217;s a blog, are there comments on the accuracy of the tutorial?  Does it agree with the others you&#8217;ve seen?</li>
<li>Once you&#8217;ve selected one or two to follow, read through the whole tutorial one time without doing anything.  Full disclosure: I never do this and it always bites me.</li>
</ul>
<p>Let&#8217;s get going with Recipe 1 &#8211; <strong>Install the AMP Stack on Mac OS X</strong></p>
<h5>Install the XCode Developer Tools</h5>
<p>First, we install the developer tools for XCode.  If you have Mac 10.7 and above, you can download the XCode application from the App Store.  To enable the developer tools, open XCode, go to the XCode menu &gt; Preferences &gt; Downloads tab, and then click on &#8220;Install&#8221; next to the developer tools.  <a href="http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/">This tutorial</a> on installing Ruby by Moncef Belyamani has good screenshots of the XCode process.</p>
<p>If you have Snow Leopard (10.6) or below, you&#8217;ll need to track down the tools on the <a href="https://developer.apple.com/downloads/index.action">Apple Developer Downloads Page</a>.  You will need to register as a developer, but it&#8217;s free.  Note:  you can get pretty far in this process without using the XCode command line tools, but down the road as you build more complicated stacks, you&#8217;ll want to have them.</p>
<h5>Configure Apache and PHP</h5>
<p>Next we need to configure Apache and PHP.  Note that I said &#8220;configure&#8221;, not &#8220;install&#8221;.  Apache and PHP both come with OS X, we just need to configure them to work together.</p>
<p>Here&#8217;s where we open the Terminal to access the command line by going to Applications &gt; Utilities &gt; Terminal.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/OpenTerminal.jpg"><img class="aligncenter size-full wp-image-3018" alt="Open Terminal" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/OpenTerminal.jpg" width="477" height="224" /></a></p>
<p>Once Terminal is open, a prompt appears where you can type in commands.  The &#8221; ~ &#8221; character indicates that you are at the &#8220;home&#8221; directory for your user.  This is where you&#8217;ll do a lot of your work.  The &#8220;$&#8221; character delineates the end of the prompt and the beginning of your command.</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/terminalprompt.jpg"><img class="aligncenter size-full wp-image-3020" alt="terminalprompt" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/terminalprompt.jpg" width="517" height="138" /></a></p>
<p>Type in the following command:</p>
<pre class="brush: text; gutter: false">cd /etc/apache2</pre>
<p>&#8220;cd&#8221; stands for &#8220;change directory&#8221;.  This is the equivalent of double-clicking on etc, then apache2, if you were in the Finder (but etc is a hidden folder in the Finder).  From here, we want to open the necessary file in an editor.  Enter the following command:</p>
<pre class="brush: text; gutter: false">sudo nano httpd.conf</pre>
<p>&#8220;sudo&#8221; elevates your permission to administrator, so that you can edit the config file for Apache, which is httpd.conf.  You will need to type in your administrator password.  The &#8220;nano&#8221; command opens a text editor in the Terminal window.  (If you&#8217;re familiar with vi or emacs, you can use those instead.)</p>
<p style="text-align: center;"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/nano.jpg"><img class="aligncenter" alt="nano" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/nano.jpg" width="468" height="293" /></a></p>
<p>The bottom of your window will show the available commands.  The &#8220;^&#8221; stands for the Control key.  So, we want to search for the part to change, we press Control + W.  Enter php and press Enter.  We are looking for this line:</p>
<pre class="brush: text; gutter: false">#LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<p>The &#8220;#&#8221; at the beginning of this line is a comment, so Apache ignores the line.  We want Apache to see the line, and load the php module.  So, change the text by removing the #:</p>
<pre class="brush: text; gutter: false">LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<p>Save the file by press Control + O (nano calls this &#8220;WriteOut&#8221;) and press Enter next to the file name.  The number of lines written displays at the bottom of the window.  Press Control + X to exit nano.</p>
<p>Next, we need to start the Apache server.  Type in the following command:</p>
<pre class="brush: text; gutter: false">sudo apachectl start</pre>
<p>Now, go to your browser and type in http://localhost.  You should see &#8220;It Works!&#8221;<a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/ItWorks.jpg"><img class="aligncenter size-full wp-image-3019" alt="Apache Browser Test" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/ItWorks-e1363179288846.jpg" width="481" height="236" /></a></p>
<p>Apache, as mentioned before, serves web files from a location we designate.  By default, this is /Library/Webserver/Documents.  If you have Snow Leopard (10.6) or below, Apache also automatically looks to username/sites, which is a convenient place to store and work with files.  If you have OS 10.7 or above, creating the Sites folder takes a few steps.  On 10.7, go to System Preferences &gt; Sharing and click on Web Sharing.  If there&#8217;s a button that says &#8220;Create Personal Web folder&#8221;, it has not been created, go ahead and click that button.  If it says, &#8220;Open Personal Website folder&#8221;, you&#8217;re good to go.</p>
<p>On 10.8, the process is a little more involved.  First, go to the Finder, click on your user name and create your sites folder.</p>
<p style="text-align: center;"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/sites.jpg"><img class="aligncenter  wp-image-3042" alt="sites" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/sites.jpg" width="539" height="307" /></a></p>
<p>Next, we need to open the command line again and create a .conf file for that directory, so that Apache knows where to find it.  Type in these commands:</p>
<pre class="brush: text; gutter: false">cd /etc/apache2/users
ls</pre>
<p>The ls at the end will list the directory contents.  If you see a file that&#8217;s yourusername.conf (ie, mfrazer.conf) in this directory, you&#8217;re good to go.  If you don&#8217;t, it&#8217;s easy to create one.  Type the following command:</p>
<pre class="brush: text; gutter: false">sudo nano yourusername.conf</pre>
<p>So, mine would be sudo nano mfrazer.conf.  This will create the file and take you into a text editor.  Copy and past the following, making sure to change YOURUSERNAME to your user name.</p>
<pre class="brush: text; gutter: false">&lt;Directory &quot;/Users/YOURUSERNAME/Sites/&quot;&gt;
  Options Indexes MultiViews
  AllowOverride None
  Deny from all
  Allow from localhost
&lt;/Directory&gt;</pre>
<p>The first directive, <a href="http://httpd.apache.org/docs/2.2/mod/core.html#options">Options</a>, can have lots of different&#8230;well, options.  The ones we have here are Indexes and MultiViews.  Indexes means that if a browser requests a directory and there&#8217;s no index.html or index.php file, it will serve a directory listing.  Multi-Views means that browsers can request the content in a different format if it exists in the directory (ie, in a different language).  <a href="http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride">AllowOverride</a> determines if an .htaccess file elsewhere can to override the configuration settings.  For now, None will indicate that no part can be overridden.  For Drupal or other content management systems, it&#8217;s possible we&#8217;ll want to change these directives, but we&#8217;ll cover that later.</p>
<p>The last two lines indicate that traffic can only reach this directory from the local machine, by typing http://localhost/~username in the browser.  For more on Apache security, see <a href="http://httpd.apache.org/docs/2.2/misc/security_tips.html">the Apache documentation</a>.  If you would like to set it so that other computers on your network can also access this directory, change those last two lines to:</p>
<pre class="brush: text; gutter: false">Order allow,deny
Allow from all</pre>
<p>Either way, press Control + O to save the file and Control + X to exit.  Restart Apache for the changes to take effect using this command:</p>
<pre class="brush: text; gutter: false">sudo apachectl restart</pre>
<p>You may also be prompted at some point by OS X to accept incoming network connections for httpd (Apache); I would deny these as I only want access to my directory from my machine, but it&#8217;s up to you depending on your setup.</p>
<p>We&#8217;ll test this setup with php in the next step.</p>
<h5>Test PHP</h5>
<p>If you want to check php, you can create a new text document using your favorite text editor.  Type in:</p>
<pre class="brush: php; gutter: false">&lt;?php phpinfo(); ?&gt;</pre>
<p>Save the file as phpinfo.php in your username/sites directory (so for me, this is mfrazer &gt; Sites)</p>
<p>Then, point your browser to http://localhost/~yourUserName/phpinfo.php  You should see a page of information regarding PHP and the web server, with a header that looks like this:</p>
<p><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/phpinfoheader.jpg"><img class="aligncenter size-full wp-image-3017" alt="PHP Info Header" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/phpinfoheader.jpg" width="612" height="282" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h5>MySQL</h5>
<p>Now, let&#8217;s install MySQL.  There&#8217;s two ways to do this.  We could go to the <a href="http://dev.mysql.com/downloads/mysql/">MySQL downloads</a> page and use the installers.  The fantastic tutorials at <a href="http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion">Coolest Guy on the Planet</a> both recommend this, and it&#8217;s a fine way to go.</p>
<p>But we can also use Homebrew, mentioned previously <a title="The Setup: What We Use at ACRL TechConnect" href="http://acrl.ala.org/techconnect/?p=2890">on this blog</a>, which is a really convenient way to do things as long as we&#8217;re already using the command line.</p>
<p>First, we need to install homebrew.  Enter this at the command prompt:</p>
<pre class="brush: text; gutter: false">ruby -e &quot;$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)&quot;</pre>
<p>Next, type in</p>
<pre class="brush: text; gutter: false">brew doctor</pre>
<p>If you receive the message: &#8220;Your system is raring to brew.&#8221; You&#8217;re ready to go.  If you get Warnings, don&#8217;t lose heart.  Most of them tell you exactly what you need to do to move forward.  Correct the errors and type in brew doctor again until you&#8217;re raring to go.  Then, type in the following command:</p>
<pre class="brush: text; gutter: false">brew install mysql</pre>
<p>That one&#8217;s pretty self-explanatory, no?  Homebrew will download and install MySQL, as of this writing version 5.6.10, but pay attention to the download to see the version &#8211; it&#8217;s in the URL.  After the installation succeeds, Homebrew will give some instructions on finishing the setup, including the commands we discuss below.</p>
<p>I&#8217;m going to pause for a second here and talk a little about permissions and directories.  If you get a &#8220;permission denied&#8221; error, trying running the command again using &#8220;sudo&#8221; at the beginning.  Remember, this elevates your permission to the administrator level.  Also, if you get a &#8220;directory does not exist&#8221; error, you can easily create the directory using &#8220;mkdir&#8221;.  Before we move on, let&#8217;s try to check for a directory you&#8217;re going to need coming up.  Enter:</p>
<pre class="brush: text; gutter: false">cd /usr/local/var</pre>
<p>If you are successfully able to change to that directory, great. If not, type in</p>
<pre class="brush: text; gutter: false">sudo mkdir /usr/local/var</pre>
<p>to create it. Then, let&#8217;s go back to our home directory by typing in</p>
<pre class="brush: text; gutter: false">cd ~</pre>
<p>Now, let&#8217;s continue with our procedure. First, we want to set up the databases to run with our user account.  So, we type in the following two commands:</p>
<pre class="brush: text; gutter: false">unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir=&quot;$(brew --prefix mysql)&quot; --datadir=/usr/local/var/mysql --tmpdir=/tmp</pre>
<p class="brush: bash; gutter: false">The second command here installs the system databases; &#8216;whoami&#8217; will automatically replace with your user name, so the above command should work verbatim.  But it also works to use your user name, with no quotes, (ie &#8211;user=mfrazer).</p>
<p class="brush: bash; gutter: false">Next, we want to run the &#8220;secure installation&#8221; script. This helps you set root passwords without leaving the password in plain text in your editor. First we start the mysql server, then we run the installation scripts and follow the prompts to set your root password, etc:</p>
<pre class="brush: text; gutter: false">mysql.server start
sudo /usr/local/Cellar/mysql/5.6.10/bin/mysql_secure_installation</pre>
<p class="brush: bash; gutter: false">After the script is complete, stop the mysql server.</p>
<pre class="brush: text; gutter: false">mysql.server stop</pre>
<p class="brush: bash; gutter: false">Next, we want to set up MySQL so it starts at login. For that, we run the following two commands:</p>
<pre class="brush: text; gutter: false">ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist</pre>
<p>The ln command, in this case, places a <a href="http://en.wikipedia.org/wiki/Symbolic_link">symbolic link</a> to any .plist files in the mysql directory into the LaunchAgents directory.  Then, we load the plist using launchctl to start the server.</p>
<p>One last thing &#8211; we need to create one more link to the mysql.sock file.</p>
<pre class="brush: text; gutter: false">cd /var/mysql/
sudo ln -s /tmp/mysql.sock</pre>
<p>This creates a link to the mysql.sock file, which MySQL uses to communicate, but which resides by default in a tmp directory.  The first command places us in the directory where we want the link (remember, if it doesn&#8217;t exist, you can use &#8220;sudo mkdir /var/mysql/&#8221; to create it) and the second creates the link.</p>
<p>MySQL is ready to go!  And, so is your AMP stack.</p>
<h5>But wait, there&#8217;s more&#8230;</h5>
<p>One optional tool to install is phpMyAdmin.  This tool allows you to interact with your database through your browser so you don&#8217;t have to continue to use the command line.  I also think it&#8217;s a good way to test if everything is working correctly.</p>
<p>First, let&#8217;s <a href="http://www.phpmyadmin.net/home_page/downloads.php">download the necessary files</a> from the phpMyAdmin website.  These will have a .tar.gz extension.  Place the file in your Sites directory, and double-click to unzip the file.</p>
<p>Rename the folder to remove the version number and everything after it.  I&#8217;m going to place the next steps below, but the <a href="http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion">Coolest Guy on the Planet tutorial</a> referenced earlier does a good job of this step for OS 10.8 (just scroll down to phpMyAdmin) if you need screenshots.</p>
<p>Go to the command line and navigate to your phpMyAdmin directory.  Make a directory called config and change the permissions so that the installer can access the file.  This should looks something like:</p>
<pre class="brush: text; gutter: false">cd ~/username/sites/phpMyAdmin
mkdir config
chmod o+w config</pre>
<p>Let&#8217;s take a look at that last command: chmod changes the permissions on a file.  The o+w sets it so users who are not the directory&#8217;s owner can write to the file.</p>
<p>Now, in your browser, go to http://localhost/~username/sites/phpmyadmin/setup and follow these steps:</p>
<ol>
<li>Click on New Server (button on bottom)</li>
<li>Click on Authentication tab, and enter the root password in the password field.</li>
<li>Click on Save.</li>
<li>Click on Save again on the main page.</li>
</ol>
<p>Once the setup is finished, go to the Finder and move the config.inc.php file from the config directory into the main phpmyadmin directory and delete the config directory.  So in the end, it looks like this:</p>
<p style="text-align: center;"><a href="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/phpmyadminlast.jpg"><img class="aligncenter  wp-image-3043" alt="phpmyadminlast" src="http://acrl.ala.org/techconnect/wp-content/uploads/2013/03/phpmyadminlast.jpg" width="462" height="263" /></a></p>
<p>Now, go to http://localhost/~username/sites/phpmyadmin in your browser and login with the root account.</p>
<p>You are ready to go!  In future parts of this series, we&#8217;ll look at building the AMP stack on Windows and adding Drupal or WordPress on top of the stack.  We will also look at maintaining your environment, as the AMP stack components will need updating occasionally.  Any other recipes you&#8217;d like to see?  Do you have questions? Let us know in the comments.</p>
<p>The following tutorials and pages were incredibly useful in writing this post.  While none of these tutorials are exactly the same as what we did here, they all contain useful pieces and may be helpful if you want to skip the explanation and just get to the commands:</p>
<ul>
<li>Coolest Guy on the Planet AMP Tutorials  (<a href="http://coolestguyplanettech.com/downtown/install-and-configure-apache-mysql-php-and-phpmyadmin-osx-108-mountain-lion">10.8</a>, <a href="http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/">10.7/10.6</a>) by Neil Gee</li>
<li><a href="http://blog.urbaninsight.com/2012/04/09/using-homebrew-support-drupal-os-x">Using Homebrew to Support Drupal on OSX</a> by Ron Golan</li>
<li><a href="http://stackoverflow.com/questions/4359131/brew-install-mysql-on-mac-os">Uninstall/Re-install MySQL</a> from stackexchange.com<a href="http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/"><br />
</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://acrl.ala.org/techconnect/?feed=rss2&#038;p=2968</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
