the code4lib journal – extra editorial: on the release of patron data in issue 58 of code4lib journal mission editorial committee process and structure code4lib issue 58, 2023-12-04 extra editorial: on the release of patron data in issue 58 of code4lib journal we, the editors of the code4lib journal, sincerely apologize for the recent incident in which personally identifiable information (pii) was released through the publication of an article in issue 58. the article “bringing it all together: data from everywhere to build dashboards” linked to two microsoft power bi files containing circulation data. timeline this is a summary of events: on monday dec 4, 2023, 11:28 pm est, the article was published as part of issue 58 of the code4lib journal. on tuesday dec 5, 2023, 02:02 pm est, a concerned reader emailed code4lib journal to flag the inclusion of the files using the email address that appears on the journal’s website. unfortunately, unknown to the current editors, that email account was not operational and, hence, no action was taken. on tuesday dec 5, 2023, 02:40 pm est, the author of the paper contacted its editor about the files; the editor removed the links to the files from the article at 02:49 pm est. on tuesday dec 5, 2023, 03:09 pm est, the author of the paper asked its editor to remove the files from the server; the editor – who did not have email access at that time – removed them at 04:15 pm est. on friday dec 8, 2023, around 11:40 am est, another editor informed the editorial board about an open letter about the incident, which was announced on mastodon. at the time of writing, the letter has 161 signatories. statistics during the time the files were online, they were accessed from 7 different ip addresses, with several accesses coming from the same ip addresses: almabibliographic holdings data.pbix 2023-12-04: 4 successful accesses (gets with return code 200, and no failed access attempts) 2023-12-05: 6 successful accesses (gets with return code 200), 3 failed attempts (gets with return code 404) almacirculation statistics.pbix 2023-12-04: 5 successful accesses (gets with return code 200, and no failed access attempts) 2023-12-05: 19 successful accesses (18 gets, 1 head, with return code 200), 3 failed attempts (2 heads, 1 get, with return code 404) the files were found not to have been cached by google, bing, yandex, yahoo, ecosia, duckduckgo, and internet archive. context the released files were in a proprietary file format, microsoft power bi, with which none of the editors have experience. since this article did not describe the actual content of the files, there was no immediate reason to believe they would contain pii. this was an erroneous assumption that the code4lib editors take full responsibility for. the current editors were also unaware that the email account listed on the code4lib journal website was not operational, slowing the notification of the editorial board, and causing the files to remain online for a longer period of time. this is another error that the editors take full responsibility for. the editorial board has since re-established access to this email address. going forward we are determined to take greater measures to prevent similar incidents from occurring in future journal issues by improving the editorial process. code4lib operates without a budget, and with volunteer editors. this means that fully addressing the feedback we have received in a responsible and sustainable way will take time. effective immediately and until we can establish policies and procedures that better safeguard personal information, code4lib journal will not accept or publish papers that utilize individuals’ personal data. we will describe this change on the journal’s website and in the call for papers. we invite colleagues who are knowledgeable in establishing relevant policies and procedures to support the code4lib journal by using their expertise to recommend sustainable guidelines that are informed by existing best practice, either independently or in the form of a journal article. we are grateful to all of those who worked to raise this important issue and look forward to collaborating with the community on best practices going forward. monday february 5, 2024. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – editorial: just enough of a shared vision mission editorial committee process and structure code4lib issue 43, 2019-02-14 editorial: just enough of a shared vision what makes a vibrant community? a shared vision! when we live into a shared vision, we can accomplish big goals even when our motivations are not completely aligned. by peter murray, issue 43 coordinating editor i love my job, and i love this profession. that is, i get excited about my job as the open source community advocate at index data and am an eager participant in the library technology profession because we freely share our knowledge and experiences. i will take as a given that i have both a myopic view and rose-colored glasses. [1] (myopic because there may be other professions that have similar inclinations to share expertise and experiences; if so, i’d love to compare notes! rose-colored…well, you can be the judge.) let me explain. in my day job working on the folio project, i alternate between astonishment at how well the community works towards the same goal and unease at not knowing how-and-why it works the way it does. (or worse: that one misstep could bring the project’s community crashing down.) this isn’t to say that the project doesn’t have rough edges; there have been disagreements over priorities, technical approaches, and other concerns. instead, the community seems to get stronger as it works through those disagreements and adds more partners. the same can be said about the code4lib community. sixteen years ago some colleagues got together to shared their expertise and experiences – first on a mailing list, then an irc channel. out of that sprang national meetings (america and japan that i know of), numerous regional meetings, this journal, and a slack team. (did i miss anything?) we’ve been through our struggles — figuring out if we’ve grown into needing a fiscal agent and who that fiscal agent would be, for example. people have left the community, and new people have joined. why does this work? can preconditions be set to strengthen the chance that a community will succeed? much has been written and talked about best practices for healthy communities, and i want to add to that body of thought. so here is my take — let’s call it the “just enough of a shared vision” theory. the just-enough-of-a-shared-vision theory i think there is a crucial need for a common understanding of what a community is about. this common understanding needs to be ingrained so deeply in the community that the participants are guided by this shared vision when they are not consciously thinking about it. and further, that there is a close alignment of one’s personal goals, one’s organizations’ goals, and the community goals. or, put another way, all three (the person, the organization, and the community) are getting benefits for the effort. what might this look like? one year’s conference organizers generously share their knowledge with the next year’s organizers. a beginner’s question on a mailing list is answered by half a dozen people with personal stories of hard-won wisdom. and yes, a new author is inspired by previous writings in the code4lib journal and wants to share their own experiences. (or become a volunteer editor for the journal!) viewed this way, we might be able to work out how to create a shared vision for a vibrant community. i think it comes in three parts. openness to sharing the vision. this openness takes the form of community members being willing to live into the community’s vision and an innate acceptance of those who say they are living into the same vision. openness to being wrong. while sharing the vision, the community members know that the community is not perfect; that there are misunderstandings, blind spots, and inadequacies. openness to new ideas. the building of the community is never done; it is a journey of experiments in doing things better and learning from each other. the community’s vision is attractive to people and organizations. people grow in experience and personal connections. library patrons are better off through services improved by that experience and personal connections. organizations take from the community in proportion to what they give to the community. and the community moves forward. in a community consisting of libraries and non-profits, i think much of this comes naturally. when commercial ventures are added to the mix, community members can wonder about motivations. is the company going to put into the community in proportion to the benefit they receive? it is here that we lean on the “just enough” part of the theory. the goals of the community and of the organizations involved do not need to align perfectly, and they probably never will. but there needs to be close enough alignment and openness in communication so the rest of the community members understand the alignment. this means that decisions are made in such a way that the goals of a participating organization are met and the goals of the community are met. that when decisions are out of balance between the organization and the community, the community has an instinctive reaction to guide the process back to balance. and i get that while this is easy to say, it is hard in practice and in specific circumstances. if the shared vision is strong enough and inclusive enough, though – wow, that is a place i’d love to be. introduction to issue 43 issue 43 has seven articles. developing weeding protocols for born digital collections authored by athina livanos-propst and edited by junior tidal: when you have 100,000 resources how do you construct a sensible way to evaluate the quality of your collection? this article describes one way to approach the challenge. content dissemination from small-scale museum and archival collections authored by avgoustinos avgousti, georgios papaioannou and feliz ribeiro gouveia, and edited by sara amato: extending the description of specialized collections – historic coins, in this case. never best practices: born-digital audiovisual preservation authored by julia kim, rebecca fraimow and erica titkemeyer, and edited by rebecca hirsch: three case studies of how three libraries with different needs and goals approach digital preservation. scope: a digital archives access interface authored by kelly stewart and stefana breitwieser, and edited by eric hanson: this collaboration extends the description of disparate digital objects. making the move to open journal systems 3 authored by mariya maistrovskaya and kaitlin newson, and edited by ron peterson: the university of toronto libraries had a tall task to update their hosted ojs installations, and in this article they describe how they accomplished it. improving the discoverability and web impact of open repositories authored by george macgregor, and edited by péter király: the university of strathclyde at glasgow test changes to their eprints site to improve search engine optimization and offer suggestions for any site looking to improve repository visibility. a systematic approach to collecting student work authored by janina mueller, and edited by ron peterson: the harvard university graduate school of design describes the technical and social issues behind their efforts to archive student works out of their learning management system. inspired by something you see here? please consider submitting an idea for an article to the code4lib journal. thank you, carol in the course of putting together this issue, code4lib journal editor carol bean finished retiring from the journal. (andrew said goodbye in his editorial in the last issue, but it has taken this long to complete the process!) carol volunteered as an editor for the journal’s first issue, and over the course of the next 42 issues she eagerly offered her insights and keen copyeditor eye. over the last few months she has transferred her knowledge and her responsibilities to other members of the editorial committee, and with a full-throated voice we say “thank you, carol!” endnotes [1] “rose-colored glasses” — an optimistic perception of something; a positive opinion; seeing something in a positive way, often thinking of it as better than it actually is. (see wiktionary definition.) i’m also grateful for colleagues like filip that make me think of broader geographic and cultural communities, and so i now think about including explanations of idioms when i use them. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – column: 700 dollars and a dream : take a chance on koha, there’s very little to lose mission editorial committee process and structure code4lib issue 1, 2007-12-17 column: 700 dollars and a dream : take a chance on koha, there’s very little to lose i truly believe that the meekest amongst us has a special duty and a special circumstance that fosters innovation. ours is not the culture of red tape entrenched tradition, but rather the atmosphere of the pioneer. no one will notice a failed experiment in the middle of nowhere, but they’ll certainly notice a cataloguer someplace in edema making a dent in backwards standards. by bws johnson one of the sentiments that i try to infect the library science populace with is the notion that innovation can come from anywhere at all. this is especially true of rural libraries. i truly believe that the meekest amongst us has a special duty and a special circumstance that fosters innovation. ours is not the culture of red tape entrenched tradition, but rather the atmosphere of the pioneer. no one will notice a failed experiment in the middle of nowhere, but they’ll certainly notice a cataloguer someplace in edema making a dent in backwards standards. so much of this field is not about the money—technology is definitely in that basket, particularly with open source making a fierce showing of things. this was the argument i took to my board: let me take a small portion of our state aid to public libraries money and try out this new fangled thing. the software’s free. yes really, we don’t pay anything for it, i just go out and grab it. nope, it won’t be more than $1,000 so we’ll still have emergency money. if it doesn’t work out, i can just reformat the drive, make it a regular old public access terminal, and we’re good to go. nope, it’s not stealing. everyone’s got something to give back to the community, and when i set things up and figure out what does what, i’ll write about it, and that’ll be our share. it’s like a barn raising. we had nothing to lose—our library wasn’t automated yet. ours was the perfect test environment. my board was receptive, my patrons weren’t attached to any system whatsoever, and my staff were behind the move. my loving husband was willing to install this for us, as well as physically assemble a custom server, although that’s not necessary—koha will run on just about everything. as with any other product, the more you put into your hardware, the better the result until you top out at a certain point. on koha, that point is frighteningly low, making my $700 box a ferrari testarossa. with the proliferation of linux user groups out there, it oughtn’t be too hard for just about anyone to approach the geeks that be and walk away with a functional server in a matter of a few hours. we’re mostly done with bibliographic input now—we’ve got just over 7,000 items catalogued of about 8,500. our patrons are in the database. we could circulate now if we wanted to. we’ve tested the basic features that we need and they work well enough for our purposes. when we started out, we were looking for the barest minimum of functionality. we got a whole lot more than we bargained for. koha is far more reliable than many commercial ils options. this was certainly a factor with me. it seemed as though things would be down every other month for a few days of unscheduled time with a few of the commercial products i’ve had the displeasure of experiencing. our server has been down twice in about 3 years of testing, with the box running 24/7. once was when my roommate inadvertently unplugged the server to charge his mobile phone. the second time was a catastrophic hardware failure. the power supply essentially caught fire. i was terribly worried my data was toast. it wasn’t. i had backups, but i didn’t need to use them. koha is far better at keyword searching than anything i’ve ever seen. something in the way it ranks search results really ends up giving you highly relevant items first. it also loots and pillages its way through a marc record so that those notes fields everyone tires over are searched through, too. the support is astounding. i have yet to pay money for support, yet i’ve had developers bend over backwards to program in a feature i’ve wanted, in a remarkably short span of time. a basic reports module came to me free of charge inside of a couple of days from across the ocean in france. an irc channel dedicated to koha tends to have someone on it most of the time. with heavily involved developers in the united states, france and new zealand the project doesn’t sleep. i can’t imagine the results you would see if you had a few thousand dollars to give to a developer for your feature. at a recent demo, i was eating lunch and chatting with the other librarians about which developer was responsible for what feature. one of the other librarians stopped me and said of their product, “wow, this is so great. you know the names of the developers. we’re lucky to even get through to support on the telephone!” with koha you get something you don’t get with any other product. you have compleat control over what your catalogue looks like, you don’t have to wrestle with a vendor to get your data to do what you want it to do, and if the product doesn’t have a feature you need, you can programme it or pay someone to add it. the rate of development and improvement over the past few years has been nothing short of astounding. when i started using koha, it was very wooden and very ugly. it’s come a long way since then. the current out of the box release is on par with at least a handful of commercial products. when the templates are customised for a given library, the product can meld seamlessly and aesthetically with a library’s website. the horowhenua library trust catalogue can give you a taste of the aesthetics: (http://www.library.org.nz/cgi-bin/koha/opac-main.pl) the upcoming version 3 looks quite like the athens county catalogue: (http://search.athenscounty.lib.oh.us/) since koha was developed in new zealand, connectivity issues caused the developers to make a product that would be very easy to access regardless of the speed of a person’s connection. i was able to access the catalogue which resided at home in albany, new york from my library in western massachusetts with no noticeable wait time for searching and data input over an incredibly crummy connection. (it was allegedly a 56k connection, but the plain old dial up telephone line connections routinely ran faster.) it’s not for everyone, however. installation is still difficult. unless you’ve someone in the area who is very comfortable with linux administration, this project will be a difficult set up. on the other hand, one can pay for a preinstalled box. cataloguing for a large institution would be tough. holdings information is a bit bodged at the moment. the cataloguing module is certainly clunky to use. the interface is tabbed with each marc field getting its own text box. as a result, either a librarian ends up sticking all of the fields in one tab for a really long screen of many, many boxes, or fields are missed by sloppy cataloguers that don’t switch tabs. it is possible to set up frameworks that anticipate necessary fields for a given material type, but this entails a good deal of planning during setup. the good news in this department is that thanks to google summer of code, a powerful new tool is being worked on to make things much nicer for cataloguers everywhere, and functionality should be vastly improved with version 3. reports are also getting a massive workover thanks to sponsorship from the british national health service. these can be tricky from a programmer’s perspective thanks to each client wanting a different data set. the new module will guide a user through the process of selecting which sets they’d like in order to produce the table or chart they’d like to pull from the raw data. because koha came from the mind of a computer programmer, there are creature comforts that librarians take for granted that could be absent or less fleshed out than one might like. increasingly, this is less true as the developers address new feature requests and the project gathers fans, and thus steam, along the way. the positive side of this is that it rapidly assimilates neat new web 2 innovations, for instance tag clouds are going to be featured in the new opac. like everything out there, there are bugs. developers do work to keep this down to a minimum, but i don’t want anyone to think i promised perfection. users are encouraged, and yea, even thanked when they submit problems to the project’s bug tracker, bugzilla (http://bugs.koha.org/cgi-bin/bugzilla/index.cgi). it’s far from perfect, but i can’t name a commercial product that has it all. ask yourself—what does my library have to lose? why not run an open source catalogue redundantly to your current system to discover the differences for yourself? if you do like koha, imagine how much you do have to lose in terms of that nasty annual license fee. you can choose to either have the product supported at an affordable rate or you can just set everything up yourself and never pay a thing except for the cost of the hardware. the model that koha is based on is very similar to national public radio or the corporation for public broadcasting. open source is out there waiting to be enjoyed by everyone, regardless of financial status. just as local programming is developed in your backyard and contributed back to the national efforts, individual libraries can customise their installation. when some flavours are contributed back, like the nelsonville templates, they prove to be very popular and are widely accepted in turn, like fresh air or nova. not everyone supports their local affiliate in a fund drive, and not everyone can afford to financially support the koha project. when libraries choose to pay for support or new features, everyone benefits since good reliable features can be selected out and then rolled into the product. even small contributions of time and labour end up making large differences in making the product better through collective effort. there is further information and a demo on the koha web site: http://www.koha.org and nicole engard has a blog entry about koha: http://www.web2learning.net/archives/1165 about the author: bws johnson is a graduate of the graduate school of library and information science at the university of illinois urbana – champaign and was the director of the hinsdale public library in hinsdale, ma. she was recently honoured to serve as president of the western massachusetts regional library system. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – infomaki: an open source, lightweight usability testing tool mission editorial committee process and structure code4lib issue 8, 2009-11-23 infomaki: an open source, lightweight usability testing tool infomaki is an open source “lightweight” usability testing tool developed by the new york public library to evaluate new designs for the nypl.org web site and uncover insights about our patrons. designed from the ground up to be as respectful of the respondents’ time as possible, it presents respondents with a single question at a time from a pool of active questions. in just over seven months of use, it has fielded over 100,000 responses from over 10,000 respondents. by michael lascarides introduction in november 2008, in anticipation of an upcoming home page redesign, the new york public library’s digital experience group ran a traditional online survey using the popular web-based tool surveymonkey.com, which we linked to from a one-line text banner at the top of our nypl.org homepage. it was a regular, please-answer-these-questions pitch comprised of 19 questions about web usage habits spread across 8 pages. over 14 days, that survey received 7,341 individual answers to questions from 520 respondents, just 60% of whom completed the whole survey. about the same time, we discovered the five second test (fivesecondtest.com), a web service built by an australian design firm based on an idea proposed by usability expert jared spool. the five second test (as the name implies) involves showing a visual design to a user for five seconds and then asking them to recall specific features, or asking them which of two designs (each shown for two and a half seconds) they liked better. we even considered using the fivesecondtest.com service to evaluate new nypl.org designs, but it lacked an easy way to redirect users back to our site once they were finished. the contrast between the two tools got us wondering if there wasn’t a way to make surveys and usability testing more painless (and dare we say fun?) for our users in order to maximize the number of responses received. to be sure, the library has strategic questions that require a lot of setup and deep knowledge about the respondents. we have a lot of those questions, and we are asking them in all their properly-sampled, audience-segmented glory, often with the assistance of consultants and our strategy department. but during the day-to-day process of designing a web site, what is often needed is just a reassurance that our team is on the right track. we contacted the fivesecondtest.com developers, who graciously gave us their blessing to adapt and expand on their ideas, and set about coding a prototype. ruby on rails was chosen as the development platform due to its flexibility and rapid prototyping capabilities, its full open source codebase, and the fact that our team had already successfully built several rails-based sites. in february 2009, we launched our solution: infomaki, an open source web application that incorporates ideas from both the five second test and traditional surveys. in its first 48 hours of public use, infomaki collected over 6,900 responses from 840 respondents, almost exceeding the entire total from the two-week traditional survey. design and implementation infomaki is a “lightweight” usability testing tool developed to evaluate new designs for the nypl.org web site and uncover insights about our patrons. designed to act as a “one question” survey, it presents respondents with a single question randomly selected from a pool of active questions. initially, two types of questions were supported: multiple choice and “where would you click to…?” (attached to a screenshot or other image). recently, we have added five-second tests for comparing two designs and for testing  recall of a design’s features. response times for each answer are captured as well. infomaki was designed from the ground up to be as respectful of the respondent’s time as possible. to this end, all of the language used in the project is geared towards lowering the cognitive load on the respondent. the link from our main web site to the tool reads, “answer a single question and help us improve our web site!” the “sales pitch” makes it clear that even if you only answer one question, it will be welcomed. figure 1 infomaki public home page figure 2 infomaki sample public page responding to a question only takes one click, and the “thank you” page that follows immediately (but politely) asks the respondent to answer another. as such, we’re finding that even with the “one question” pitch, an astonishing 90% of respondents answered more than one question, and the average number of questions answered per respondent is almost 11. it seems to be the potato chip of surveys: no one can eat just one. this has made an appreciable difference in our approach to surveys: rapid feedback leads to rapid turnover. we’re mining the vast middle ground between putting a full survey in the field with full protocols and methodologies, and asking people in the office “does this look right to you?” infomaki is not intended to be a formal research tool; rather, its strength lies in lowering the turnaround time between formulating a question and getting a response to that question from the general public. to this end, care has been taken to make it as easy as possible for staff to add questions to the system. designers here have already gotten into the habit of adding questions on friday night and returning monday morning to several hundred responses on their latest designs from weekend visitors. internally, the application is optimized to store all results from varied types of questions in a single common database table, which makes it extremely easy to analyze response statistics and ensure that no respondent sees the same question more than once. response data is displayed in tables and histograms (for multiple choice-type questions) and heat maps (for “click on this”-style questions). heat maps can show up as individual clicks or a percentage grid overlay, and colors are adjustable for contrast with different designs.  we welcome those from outside the nypl who would like to analyze the collected data; feel free to contact us. figure 3 infomaki sample heat map results page figure 4 infomaki sample histogram results page results the “lightweight” level of engagement on the part of the user has led to stellar response rates. in its first seven months of intermittent use, infomaki has captured 111,823 responses to 231 design, language and demographic questions from 10,203 individual respondents. that’s an average of 484 responses per question posted and 10.96 questions answered per person. when the banner is posted on nypl.org, roughly 1% of visitors click through from the main site, and over 90% of respondents answer more than the “one question” we asked them for. surprisingly, given that it’s essentially just a survey tool, users have called infomaki “fun,” “like a video game,” and “addictive”. more than one person has reported wanting to “find the end” by answering all of the active questions. in fact, the first improvement implemented as a result of user feedback was a way to skip the thank you page and keep answering questions without interruption. by testing designs with infomaki and in-person usability tests in tandem, we have been able to uncover a number of insights and potential pitfalls. ambiguities in navigation language were especially plentiful; for example, shortening the link to our fundraising page from “support the library” to “support” led to confusion with “technical support” (we reverted to “support the library”), and using the label “community” for a page with links to social networking tools had the unforeseen effect of siphoning clicks away from users seeking information on their local branch library (as much as 40% in one test; we changed the link to “interact with us”). more broadly, the iterative testing process has made abundantly clear the degree to which changes in a single element have an effect on other parts of the page. on one recent web page design, the main navigation was working acceptably, and when we added a search bar, response times went up precipitously. analysis showed that the search bar components looked too much like the other navigation links, increasing the (apparent) number of choices that users were required to cognitively parse. adding a background tint to the navigation and other design cues to create a distinction with the navigation returned the response times to acceptable levels. figure 5 navigation design changes figure 6 example of recall test drawbacks and criticism we have identified a few problems with the infomaki approach. first, by linking to the survey from the main web site, we don’t get a rounded profile of all library users. it’s safe to assume that infomaki respondents are among our more web-savvy patrons. but as long as we’re aware of that limitation, we’ve determined that it’s not a detriment to have a bias towards web users since most questions posted directly relate to the web site. a more pressing issue is the identification of particular “user segments” or “personas,” groups of users who are deemed to have the same general behavior patterns (such as researchers, recent immigrants, and so on). when we recently announced a new round of tests on twitter, usability expert craig tomlin tweeted back, “ouch, they don’t know the persona of the tester!” we had not deemed segmentation as critical for this particular test, since we were a) mainly testing global navigation which needed to apply to everyone, and b) testing so iteratively that problem areas would become apparent even though we might not know who was having the problem. but tomlin’s comment spurred us to add new tools to mark the referral source of the respondent. we also plan to add cross-segmenting based on the subset of users who answered a demographic question during the same session (for example, show only clicks from respondents over 50 years old). there are definite order biases that can creep in by presenting questions randomly. sometimes, when asking for user feedback in a text field, we will find users responding with the exact language that was used in a previous question. this may be mitigated in the future by presenting questions in a preferred order rather than a truly random one (for example, the “five-second recall” test works best when the user hasn’t already seen the same design in a different kind of question). however, we feel strongly that frequent, high-volume iterations of testing, combined with smaller volumes of more formal, segmented testing should give us a well-rounded view of potential problem areas with web designs. open source release the infomaki source code was released to the community under the gnu general public license on may 5, 2009. the current release is a “throw it over the side and see if it swims” release. to get it running, one needs to be familiar with the ruby on rails programming framework. it has spotty-to-nonexistent test coverage, a bit of vestigial code, and possibly some dependencies on a rubygem or two that we forgot to package. some non-user-friendly features remain in the administrative interface, such as the fact that it’s possible to delete screenshots that are in use, causing errors. the nypl plans to update the code to include more user-friendly administrative features by the end of the year. for more information on deploying infomaki from the current codebase including step-by-step “quick start” instructions, see this blog post: http://labs.nypl.org/2009/05/06/infomaki-goes-open-source/ since the open source release, we have been alerted to a couple of similar projects (see usabilla and chalkmark in the “references” section), the developers of which have been gracious in sharing ideas with us. to the best of our knowledge, infomaki is the only full open source tool in its class. roadmap we’ve added a number of generic demographic questions to the mix (how old are you, where do you live, etc.) and the hope is that in future versions, we will be able to segment responses to one question based on the answers to another question. for example, we can test familiarity with certain terms in one question and segment out those responses by age (for any respondents who answered both questions). behind the scenes, there are definitely some improvements that need to be made. it’s becoming clear that a frequent pattern of use is to test the same question (”where would you click to…?”) over screen-shots of several variant designs. right now, one must enter the same question repeatedly to get these comparisons. a future redesign of the administrative interface may allow us to build a suite of questions and simply upload a new screenshot to that suite to launch a new battery of tests and compare it to previous versions. we have also been thinking about ways to score accuracy, perhaps by adding values to particular click locations. since the tool is already capturing response times, a scatterplot chart with time on one axis and accuracy on the other would be a compelling illustration of which designs are performing the best. ideally, we’d like to work out a way that this tool can be “baked in” to the new nypl.org redesign so that user feedback becomes an ongoing, always-on process. we are considering ways of displaying the feedback banner based on context, such as only displaying the banner to a small, random percentage of visitors, or only to those visiting certain pages or searching for certain terms. as of this writing, we already have prototype versions of some of these features running locally and will be folding them into the public source code within a few weeks. we encourage everyone to download the infomaki source and let us know how your experience goes! references infomaki project page at sourceforge http://sourceforge.net/projects/infomaki/ infomaki on twitter http://twitter.com/infomaki infomaki’s launch announcement http://labs.nypl.org/2009/02/16/introducing-infomaki-bite-sized-usability-testing/ infomaki’s open source release announcement http://labs.nypl.org/2009/05/06/infomaki-goes-open-source/ jared spool’s original post on the five second test concept http://www.uie.com/articles/five_second_test/ five second test web service, from the australian firm angry monkeys http://fivesecondtest.com/ usabilla, a similar web service (free beta) http://usabilla.com/ chalkmark, another similar web service (fee-based) http://www.optimalworkshop.com/chalkmark_alt.htm the design firm volkside was one of the first users of infomaki after its public release http://www.volkside.com/2009/07/usability-test-with-infomaki/ about the author michael lascarides is the user analyst for the digital experience group of the new york public library and a member of the mfa computer art faculty at the school of visual arts. subscribe to comments: for this article | for all articles 2 responses to "infomaki: an open source, lightweight usability testing tool" please leave a response below: dennis van der heijden, 2010-10-29 besides ny library is someone else using this? like to see some working example the ny lib is not working anymore jesus tramullas, 2011-01-16 a reference to this work (in spanish), http://tramullas.com/2010/11/02/analisis-de-usabilidad-con-infomaki/ leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – developing an online platform for gamified library instruction mission editorial committee process and structure code4lib issue 35, 2017-01-30 developing an online platform for gamified library instruction gamification is a concept that has been catching fire for a while now in education, particularly in libraries. this article describes a pilot effort to create an online gamified platform for use in the woodbury university library’s information literacy course. the objectives of this project were both to increase student engagement and learning, and to serve as an opportunity for myself to further develop my web development skills. the platform was developed using the codeigniter web framework and consisted of several homework exercises ranging from a top-down two-dimensional library exploration game to a tutorial on cleaning up machine-generated apa citations. this article details the project’s planning and development process, the gamification concepts that helped guide the conceptualization of each exercise, reflections on the platform’s implementation in four course sections, and aspirations for the future of the project. it is hoped that this article will serve as an example of the opportunities–and challenges–that await both librarians and instructors who wish to add coding to their existing skill set. by jared cowing introduction undergraduate students at woodbury university are required to take a 1-unit information literacy class, information theory and practice, which is taught by librarians. each librarian is allowed flexibility in customizing their course sections to suit their teaching style and to try new ideas. a librarian wishing to make such customizations might find themselves frustrated with functional limitations presented by moodle, woodbury’s course management system. those possible frustrations include the rigidity in how online activities may be structured: instructors can create a multiple-choice quiz or prompts for the student to write an answer to a question, but it is not possible to create deeper interaction through the recall and manipulation of previous answers or through more advanced logic to determine custom reactions to student responses. another frustration might be the visual experience of using moodle; assignment content competes with other visual information that lines all four sides of the browser window, increasing the cognitive load of users. this visual information ranges from layer-upon-layer of navigation bars to moodle announcements to footer disclaimers. while moodle provides us with deep functionality in many areas that is invaluable, the overall user experience of moodle could be described by few as ‘fun’ or ‘inspiring curiosity.’ upon encountering these frustrations, i began a project to develop a web platform that could host more customized and interactive class assignments. initial experiment and obstacles the goal of this project started out simple: to create an interface that could accommodate multiple-choice questions or written answers, and that allowed for more flexible responses to user input. just as importantly, the interface needed to be as visually clean as possible, containing the absolute minimum of noise necessary. the hope with this visual approach was that it might reduce cognitive load and help users focus more on the single question being presented to them at any given time. such an interface was relatively simple to create with basic html/css, javascript, and php. it was indeed a cleaner visual experience. however, it became quickly apparent that despite some visual benefits, the functionality was not unique enough to justify a departure from moodle. editing the questions required directly entering them in the php code, which was certainly no faster than editing questions through a graphic user interface in moodle. additionally, there was no authentication or database system in place to securely identify and store student answers. to justify any time spent pushing this idea further, i would need to stop and think more clearly about my goals and the technology needed to achieve them. as someone with novice coding skills, these initial efforts represented an effort to have some fun coding a basic interactive tool. to progress any further, the project’s more personal goals would need to take a back seat to the realistic needs of a web platform intended for a real classroom environment. figure 1. this might look cleaner than moodle, but is this quiz that much more engaging, or is it just reinventing the wheel? getting serious about having fun taking the time to stop and think about where this project was going revealed a clearer set of goals and requirements: a platform or framework was required that allowed for basic functions like user authentication and sessions, the storage/retrieval of information from a database, and usage of a templating system. this platform could not be so overly complex that i would need to spend my time learning how to do things ‘the drupal way,’ for example, and in so doing lose some ability to be flexible and improvise. from a pedagogical standpoint, i required the ability to create assignments that were interactive, engaging, personalized, and that could vary widely in structure from week-to-week. the answer to these technological needs, codeigniter, came through the suggestion of a colleague. the answer to the pedagogical needs came through the concept of gamification. codeigniter codeigniter is a php-based web framework that is lean, efficient, and highly extensible. it is built on mvc architecture (model-view-controller) and represented the ideal balance of functionality with the simplicity that allowed for rapid development. the documentation is up to date and extremely clear, and is written in a way that allows for the flexibility to either take advantage of codeigniter’s mvc structure or ignore it completely. for a beginner, it represents the ideal sandbox to work in with just the right amount of fool proofing to keep one out of trouble. gamification gamification has only recently gotten a name but has been a trend in education for some time. at its core, it is “using game-based mechanics, aesthetics, and game thinking to engage people, motivate action, promote learning, and solve problems” (kapp 2012). it does not need to be the literal use of games in the classroom; rather, it can be any effort that utilizes motivational mechanisms that also exist in games. done well, it should not come off as a gimmick or as an excuse to play games. rather, gamification in the classroom should be used with clear learning objectives in mind. to dig deeply into how or why it might work, it is necessary to delve into game theory and the psychology of motivation. many such theories attempt to break down the individual mechanisms present in most games (kapp 2012). other theories detail the various personality types that gravitate to different game mechanisms (bartle 1996). still more theories attempt to define the very concept of “fun” or the conditions necessary for a person to experience motivation (deci and ryan 2000). working result utilizing codeigniter and the principles of gamification in a new round of development, the result was a platform containing five separate homework assignments. to access each assignment, the student would click on a link in moodle that took them to a login screen specific to that assignment. each student’s login credentials were set manually in code at the onset of the course. after logging in, the student would get an introductory screen letting them know what they could expect. after that point, the nature of each assignment diverged considerably. the first two homework assignments were largely multiple choice and text-answer based, and utilized much of the pre-codeigniter code. questions were mostly stored and supplied through a php script that existed outside of codeigniter’s mvc structure and were dynamically inserted into the page through jquery animations. figure 2. the beginning of homework #2, which includes custom paths based on the student’s choice of major. the third homework was the first one conceptualized after codeigniter and gamification became integrated into the project. the objective of this assignment was to prepare students for a physical library tour that would be taking place the following class. the intent was to have students start the tour already curious about various shelving locations and materials in the library. to achieve that end, the homework assignment became a top-down game in which students had to move around a representation of the library’s floor plan to discover all our shelf locations–along with several easter egg locations. at the end of the game, students receive a prompt to go to the library in person, find some of these shelf locations, and write some observations in a moodle forum. the game was built mostly using javascript and css, and consists of several html tables used to simulate the floor plan of each library space. when a player presses an arrow key to move, their current location and desired movement direction are checked against an array of 1’s and 0’s that dictate whether a player can or can’t move in that direction. this array also helps determine whether an event will be triggered upon entering the destination ‘tile.’ curious readers can try the game here using ‘code4lib’ as both the username and password. the objective of the fourth assignment grew out of my own classroom metaphor that research is like assembling a team of superheroes, in that one must think about how each source complements the strengths and weaknesses of the others, and how each helps to accomplish the ‘mission’ at hand. this metaphor is to counter a common student temptation to find several similar sources that all provide the same information. to encourage students to practice this ‘team building’ mentality, the objective of this assignment was to have students assemble a team of ‘heroes’ (sources) to help answer a previously identified research question. the homework consists of a workspace in which they can fill in basic information on each hero to demonstrate what role it plays in their research. students can also see how far along they are using a progress bar. when they select a type of source to categorize their hero under, a corresponding insignia is revealed to show that they have ‘recruited’ a new source to their team. figure 3. the fourth homework assignment on this site, labeled here as #7 because assignments 4-6 were separate activities completed outside of this site. making this assignment work required much more constant communication with the mysql database of student responses, and so the mvc architecture of codeigniter was leveraged much more in order to access its native database functions. while there are advantages to the visual continuity provided when using jquery to dynamically insert new content on a page, properly taking advantage of codeigniter’s database driver tools required sending information to a controller php script and–in so doing–loading a new page using a coded url. receiving information from the php script and displaying it on the page also necessitated the reloading of pages. i took from this assignment a much better appreciation of the power available through more fully utilizing codeigniter’s core architecture. the final homework assignment on this site involved citations and apa formatting. few people would call this their favorite topic, and so the challenge in developing this assignment was to make it engaging and to prompt students to pay closer attention to how and why citations are used. the result was an assignment containing a mix of small exercises including a ‘seek the citation errors’ mini-game. it also would recall and display students’ answers from previous assignments to prompt them into thinking about what information they would need to look the source up again. reception, aspirations, and advice this platform was developed mostly through the winter of 2015/16 and has so far been used by myself while teaching four sections of information theory and practice–one in spring 2016, one in the summer, and two this fall. some takeaways became clear early on, while others have taken some time to think over. student reactions the most positive reaction seemed to come from the top-down game. students would begin the following physical library tour asking about parts of the library–such as our loft space–that they did not previously know existed. my speculation is that the positive reaction came in part because this assignment is the most game-like of them all. additionally, the fact that the game’s setting was in our own library may have made the experience more personal and relatable. the version of this platform that was used in the spring and summer did not contain the functionality to recall a student’s previous answers. if they restarted a homework assignment, any answers already submitted would not populate in text boxes (except for the “hero recruiting” assignment, which required the recall and display of stored answers to work properly). while this shortcoming was disclaimed in the assignment instructions, it understandably led several students to think that their assignments had been erased or never received for grading. this was a frustrating user experience resulting from my having omitted a critical feature. in the time between the summer and fall semesters, the functionality necessary to display and modify a student’s prior answers was added. aspirations for the project while the result of this project–a gamification of my homework assignments–was worthwhile, the next goal is to think about ways that the platform could be extended to further infuse those concepts into class lectures and in-class activities. those gamified in-class activities that have been used–such as an online drag and drop call number sorting exercise i developed–appear fairly successful in engaging students. another aspiration is to develop assessment measures to better gauge the platform’s effectiveness. it is difficult to gauge a student’s reactions while they complete a homework assignment beyond looking at their homework answers and their overall class performance. in addition, student responses in the standard university course evaluations were usually more general in nature and made few distinctions between the gamified class elements being tested and the core elements that were shared by all sections of information theory and practice. to better measure the success of these efforts, a new assessment method will be needed that prompts more specific feedback from students. researching the theories behind gamification has provided new lenses through which to analyze each class assignment and look for ways to engage different types of learners. delving deeper into the literature on gamification may reveal new ways that different personality types could be motivated when completing these assignments. these efforts will help to ensure that my own attempts at gamification are not limited by personal preferences for what features are the most engaging and instructive. one possible step might be to empower students who are more motivated by social or competitive game mechanisms; this could be done through features like allowing students in the top-down library exploration game to drop notes and items on the library floor for their other classmates to find. in teaching a graded course, more control is offered in that students become partly responsible for observing the technological requirements of each assignment. this represents a departure from the realities experienced by professional web developers, who must be prepared to serve users of any device, operating system or internet browser. this platform made heavy use of css3 and jquery animations that rendered older versions of internet explorer useless, and it came as a great surprise just how many students were still using these older browsers. looking forward, one final goal is to explore making this web platform more accessible for users of different browsers and devices, and also for users with visual disabilities. advice for others in addition to the other stated goals of this project, it also served as one possible example of how an instructor or librarian might–or might not–be able to use basic coding skills as a tool in their pedagogical toolkit. a project of this nature could be rewarding for both the instructor and students, but with major cautions. one caution is that for any experimental product created by a novice coder, students may find bugs or encounter the occasional user experience difficulty. expect some inquiries on weekends and in the late of the night, and be prepared to offer quick responses to address any problems right away. students may need to be offered the benefit of the doubt, and some flexibility, if they say that they ran into trouble. no student wants to be penalized for a technical issue. beginning coders should be encouraged to let their imaginations run wild and not be afraid to build things that are flawed in conception and wildly inefficient in execution. it is easy to allow the rigid and complex structures of professional coding practice to dim the light of inspiration that will drive a novice to learn. it is that messy sort of trial and error that can nurture a long-lasting love for coding, and it may produce the occasional innovation worth keeping. nevertheless, if the intent is to finish with a polished product used by others, one must be prepared to scrap much of what has been done in order to build again with a clear strategy and outcomes in mind. for learning purposes, there should be no shame in having to do something twice if unique insight was gained each time–provided that no deadlines were missed along the way. conclusion i plan to continue using this platform for the near future, with a stronger focus on assessment and a willingness to continually make strategic improvements. i’m especially interested in getting feedback from more seasoned developers and instructors alike about what they think could be improved or done differently. while this project was far from groundbreaking in the technical or pedagogical sense, the hope is that it represents a realistic example of what can be produced by a librarian or instructor who is interested in trying their hand at coding. references bartle r. 1996. hearts, clubs, diamonds, spades: players who suit muds. journal of mud research. deci el, ryan rm. 2000. self-determination theory and the facilitation of intrinsic motivation, social development, and well-being. american psychologist. 55(1). kapp km. 2012. the gamification of learning and instruction: game-based methods and strategies for training and education. san francisco: pfeiffer. further reading de jong t. 2010. cognitive load theory, educational research, and instructional design: some food for thought. instructional science [internet]. [cited 2016 nov 18];38(2):105-134. available from: http://link.springer.com/article/10.1007/s11251-009-9110-0 ke f. 2009. a qualitative meta-analysis of computer games as learning tools. in: ferdig re, editor. effective electronic gaming in education. hershey (pa): information science reference. p. 1-32. madigan j. 2016. getting gamers: the psychology of video games and their impact on the people who play them. lanham (md): rowman & littlefield. sitzmann t. 2011. a meta-analytic examination of the instructional effectiveness of computer-based simulation games. personnel psychology. 64(2): 489-528. about the author jared cowing is the systems librarian and an assistant professor at woodbury university in burbank, ca. his professional interests include the gamification of libraries and the development of more interactive, intuitive library discovery interfaces using rich library metadata. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – developing an academic image collection with flickr mission editorial committee process and structure code4lib issue 3, 2008-06-23 developing an academic image collection with flickr a group at lewis & clark college in portland are in the process of developing an educational collection of contemporary ceramics images using the photo sharing site flickr as a back end. this article discusses the evolution of the project, flickr machine tags, and the concept of flickr as an application database layer. the article includes code samples for creating and querying machine tags using the flickr api. by jeremy mcwilliams introduction academic visual resources are in the midst of a shift from traditional slide libraries to reliance upon digital collections. rather than loading the slide tray for a class, instructors are turning to digital image collections like artstor, james madison university’s mdid, and collection software like insight, for teaching. such resources tend to have higher quality and better-described images than what one might get from a google image search. yet resources like mdid and artstor are closed data silos and can be difficult to work with due to proprietary presentation software and copyright restrictions on the images themselves. and despite typically lower quality images found via google image search, instructors often use those images because they’re easy to find and use (if not necessarily legal). in the summer of 2007, a group at lewis & clark college in portland, oregon, decided to create an alternative image resource collection for education. specifically, the goal was to develop a collection of contemporary ceramics images, as no such resource existed. but rather than gathering images in a closed platform like mdid or artstor, we wanted to develop a collection that had high quality images, was open to anyone, included a distributed model for adding and cataloging images, and was mobile/remixable in the spirit of web 2.0. it became clear that the photo sharing site flickr was an intriguing, if somewhat experimental, solution to achieve these goals. flickr already has a ‘group’ model, in which users can contribute images toward a shared collection. a flickr group can also be moderated, so a curatorial board of designated administrators can accept/reject images submitted to the group. flickr also allows users to assign a creative commons license to images they own, which permits the images to be used with fewer copyright restrictions. in addition, flickr’s impressive application programming interface (api) lets developers easily create web sites with flickr images and data. with these ideas in mind, we decided to take the plunge and attempt to build a contemporary ceramics image collection for education with flickr as the primary back-end. we figured it could end up as a failed r&d experiment, or it could provide a revolutionary model for academic image resource collections. our results thus far are at accessceramics.org. this article will discuss the site design and evolution of accessceramics, flickr machine tags, and the concept of flickr as the database layer for an academic image collection. accessceramics.org: initial design our working group consisted of ted vogel (assistant professor of art, program head in ceramics, department of art, lewis & clark college), margo ballantyne (visual resources curator), mark dahl (assistant director for systems and technical services), and myself, jeremy mcwilliams (digital services coordinator). we didn’t really have any extra time, resources, or additional staff to devote to the creation of the image collection, though our expertise in different areas helped to distribute the workload fairly evenly. ted and margo developed the metadata schema and worked directly with artists, while mark and i handled the technological aspects, including plenty of testing within flickr, and the development on the code base. we hoped to rely as much as possible on the existing flickr infrastructure for collection organization, metadata storage, and user authentication. the idea was to create a lightweight, mobile site that was little more than a thin technological layer on top of flickr. the initial site consisted of php, css, and the jquery javascript library, and handled all data storage within flickr via the api (figure 1). essentially, we wanted flickr to be the database. figure 1: accessceramics initial model [view full-size image] during our initial development, i created a test flickr group, and wrote php code to create an interface that interacted with flickr using its api. the site was designed to work with basic flickr api functions, including flickr authentication, viewing flickr image sets on our interface, adding tags to images, and submitting images to flickr groups. once development and test phases were completed, we invited local ceramicists to create free flickr accounts, upload images of their works, and join our flickr group. the artists then used our interface to catalog and submit their images to the collection. to do this, an artist would log in to flickr through our site, select an image from their personal flickr collection, and then add metadata to a cataloging form to describe the image (figure 2). upon submission, php scripts converted the metadata to tags, added them to the image on flickr, and placed it in the flickr group queue, where it awaited approval or denial by a group administrator. figure 2: accessceramics cataloging form[view full-size image] yet our code did more than just convert metadata to tags. in order to create useful metadata for images, the cataloged data was converted to machine tags, a relatively new type of tag structure that we hoped could make the ‘flickr as database’ concept a reality. flickr machine tags one of flickr’s most popular features is the ability for users to describe images with tags. this creates an environment for social photo sharing, as flickr users can easily view sets of images tagged with common keywords. but tags alone don’t provide the depth of metadata description that some image collections might require. users of such collections should be able to search and browse by different fields, and keyword tagging simply doesn’t provide that framework. recognizing that need, flickr launched machine tags in january of 2007. machine tags have the format namespace:field=value, enabling complex image descriptions. not only can machine tags allow field-value relationships, but similar relationships can be grouped together with a common namespace. geotagging is perhaps the most common use of machine tags, as a simple keyword tag of ‘45.12234’ won’t have the same meaning as geo:lat=45.12234. and while there was some initial discussion to regulate the use of machine tag namespaces, the selection of a machine tag namespace in practice is largely arbitrary. while flickr users can create and view machine tags in the flickr interface, they are intended primarily for use in the flickr api. since a user on flickr is not likely to add a tag like ‘image:color=red’, it makes more sense for code in an external application to take user inputted metadata and convert them to machine tag syntax. in the case of accessceramics, we developed a cataloging interface for artists that takes form values, converts them to machine tags, and uses the api to tag the targeted image on flickr. similarly, if a user wanted to browse images in which the glaze is electric oxidation, the application should convert the query to machine tag syntax, perform the query through the api, and return a formatted results set. in other words, the existence and use of machine tags should be invisible to the user, just as sql queries are in common lamp applications. flickr api machine tag code samples flickr’s api has over 100 methods for a variety of purposes, utilizes a rest-style format, and requires an api key. each method has a thorough demonstration page in which users can enter sample queries, and receive xml responses (here’s an example). developers have also created a number of api kits in a variety of languages to further simplify the api interaction process (we use dan coulter’s phpflickr). for the purpose of these examples, we’ll use language-independent rest url queries, with xml responses. we hope they will provide some insight on our attempts to store and retrieve image metadata in flickr. adding a machine tag to add a tag or machine tag to a photo in flickr, flickr.photos.addtags is the appropriate method. in this example, we’ll add a machine tag to an image for a fictional image collection of dogs. to designate a ‘breed’ field as ‘cocker spaniel’, the machine tag could read dogs:breed=’cocker spaniel’. below is the structure of the rest url to add the machine tag to the flickr image through the api: http://api.flickr.com/services/rest/?method=flickr.photos.addtags&api_key=xxx&photo_id=2411163173&tags=dogs:breed='cocker+spaniel'&auth_token=xxxx&api_sig=xxx this particular action requires an auth_token and api_sig to verify the write permission to add the tag (more information about flickr api authentication can be found on the authentication api page for flickr services). also, quotes are required around cocker spaniel, as it is a multi-word tag seperated by spaces. quotes aren’t required if the value is a single word. the response xml is: which just confirms the addition of the machine tag. the screenshot below shows the addition of the machine tag in flickr. notice that machine tags are grouped separately from normal tags. retrieve results via machine tag an effective method to perform a machine tag search is flickr.photos.search (for more information on machine tag query syntax visit the flickr.photos.search page). this method has an optional machine tag parameter, and can also be narrowed to a group. here is a query of the accessceramics flickr group for images in which the object type is a wall piece: http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=xxx&machine_tags=ã“machine_tagsã“+=>+ã“ceramics:object_type=wall_pieceã“&group_id=511711%40n24 the machine_tags value in the url is slightly different than the rest of the parameter / value pairs. also, notice the underscore between wall and piece. it is important to note that this is not machine tag query syntax, but rather a decision we made for accessceramics in handling multiple word machine tag values. this practice seemed to yield better success, and we used php to convert underscores to spaces when preparing the html view. the quotes around machine_tags and ceramics:object_type=wall_piece are part of the rest syntax for machine tags used in flickr.photos.search. this yields the response: when parsed, reformatted, and augmented with additional data using the flickr api method flickr.photos.getinfo, a results screen like this can be created (figure 3): figure 3: formatted results screen from machine tag query [view full-size image ] ‘flickr as database’ flickr has an excellent infrastructure for developing image collections, both on the site itself, and with external applications using the api. however, in some ways, it may not be quite ready as an exclusive database layer for an academic image resource. by default, anyone can add tags to images in flickr, and changing tagging permissions is not entirely a straightforward process. this is analogous to permitting anyone to have ‘write access’ to the database. perhaps in the context of sites like wikipedia, this isn’t necessarily a deal breaker. nonetheless, it’s difficult to ignore potential cases of sabotage. for example, if a user didn’t like a particular piece of art in our collection, he/she could find the image on flickr, and tag it with ceramics:title=’i_am_not_fond_of_this’. while machine tags have potentially expanded flickr as a resource, they still lack a couple important features. perhaps most important is the inability to perform truncated machine tag searches. for example, a search of ceramics:material=clay will return only exact matches; machine tags disallow wild card variables in the value portion of the tag. creating a search interface without this feature would likely create a frustrating experience for the user. also, as mentioned previously, there is currently no authority to regulate machine tag use. this is probably fine for now, but could become an issue if more developers use machine tags. the ‘flickr as database’ model also lacks a degree of centralized control to handle tedious details, like spelling variations on metadata tags. by exclusively using flickr to store metadata, artists would be required to make corrections to their own tags in order to adhere to bibliographic control. this isn’t very practical, as tasks like this should be performed centrally. in our case, we’re indebted to our artists for taking the time to upload and catalog their images; we don’t want to hassle them with nitpicky metadata problems. while the flickr api is quite possibly the web services standard by which other apis should be judged, it lacks certain methods that would be useful for our project. if we wanted to create a ‘browse by field’ screen, for example, there currently isn’t an api method to gather all possible machine tag values in an image collection for a given field. it would require an api call to retrieve a list of images in the collection, another api call per image to retrieve the machine tags, some code to select the desired tags via regular expressions and place them in an array, and finally some processing of that array prior to displaying on the interface. this sequence of events just isn’t practical. a comparable action to retrieve the same result set from a mysql database would require just a single query and some basic conversion of the results to html. because of these various issues, we ultimately decided to abandon using flickr as the exclusive database layer, and began storing metadata in a mysql database (figure 4). not only does this give us more control over the data, but it will make the development of site tools easier, as we won’t necessarily have to depend upon the existence of certain flickr api methods to add functionality. in our new model, artist-entered metadata is stored in the mysql database, and machine tags are generated by an accessceramics ‘super user’ flickr account. we’re still creating machine tags on flickr images, with the hope that functionality will improve in the near future, or that flickr will build a true collection feature to fit cases like ours. the shift to a mysql database will give the site administrator more control of the metadata, make the site run faster, and will catalyze the development of site tools and functionality. figure 4: accessceramics current model [view full-size image] future directions as of spring 2008, accessceramics has a little over one hundred images contributed by about a dozen artists. we’re hoping that volume might be a typical weekly yield in the very near future. we are also attempting to procure grant funding to accelerate the development of the project; up to this point, all work on the project has been squeezed in amongst our other various duties. with additional funding, we would hire a coordinator to help artists with the image submission process, and enlist technical expertise to better design and develop the site. aside from increasing the volume of the collection, we plan to develop tools to facilitate educational use of the images. our short term laundry list includes the creation of better searching and browsing capabilities, and facilitating the use of the images and metadata in slideshow and presentation software. we also hope ceramics educators will use the accessceramics collection in the flickr interface, as flickr has a track record of unveiling new tools for users, some of which may be useful in an educational setting. while flickr has ruffled some feathers by now supporting video, the development has added some intriguing possibilities for enhancing accessceramics and similar flickr-based collections. our site could eventually include videos showing comprehensive views of a given piece of art, tours of ceramics exhibits, interviews with contributing artists, and actual lectures or teaching tips that could be useful for education. and videos work seamlessly with the flickr api; this post by flickr’s kellan elliott-mccrea includes further description and code samples for embedding flickr videos within a web application. we hope other developers will continue to discover ways to use flickr for education and digital collections. while some in the academic community might view flickr as little more than a variation of myspace, perhaps the recently added library of congress collection will help change perceptions and encourage more experimentation and development with flickr. peter brantley of the digital library federation and mark dahl from our accessceramics group have discussed the notion of an ‘academic flickr’, theoretically provided as a sub-service of flickr itself. while this may or may not come to fruition, we should take advantage of what flickr has already offered: a free set of wonderful tools to help us redefine what a visual resources collection can be. acknowledgments: thanks to ted, margo, and mark for your hard work, to watzek library director jim kopp for letting us library people work on this, to the contributing artists, and to flickr for being flickr. note: accessceramics is not an open source project, though we would be happy to share our code. email jeremy (jeremy2443@gmail.com) if you’re interested. about the author jeremy mcwilliams is the digital services coordinator at lewis & clark college’s watzek library in portland, or. he has been at lewis & clark for 10 years, and enjoys creating public and staff-side library web applications. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – lantern: a pandoc template for oer publishing mission editorial committee process and structure code4lib issue 53, 2022-05-09 lantern: a pandoc template for oer publishing lantern is a template and workflow for using pandoc and github to create and host multi-format open educational resources (oer) online. it applies minimal computing methods to oer publishing practices. the purpose is to minimize the technical footprint for digital publishing while maximizing control over the form, content, and distribution of oer texts. lantern uses markdown and yaml to capture an oer’s source content and metadata and pandoc to transform it into html, pdf, epub, and docx formats. pandoc’s options and arguments are pre-configured in a bash script to simplify the process for users. lantern is available as a template repository on github. the template repository is set up to run pandoc with github actions and serve output files on github pages for convenience; however, github is not a required dependency. lantern can be used on any modern computer to produce oer files that can be uploaded to any modern web server. by chris diaz motivations open educational resources (oer) are free teaching and learning materials that are available online for unlimited use, consultation, adaptation, and distribution. typically, oer are distributed under a creative commons license [1]. while they can be downloaded and used for free, maintaining an oer support infrastructure is an expensive endeavor. for example, academic libraries provide services to faculty focused on oer awareness, adoption, and creation. these services require staffing, training, coordination, technology, and marketing. institutional oer grants and faculty stipends are a popular method for incentivizing and supporting the creation of new oer (santiago & ray 2020). however, in order for the public to reap the benefits, the oer needs to be published. libraries also support the publication of oer by making the oer content discoverable, accessible, preservable, and reusable. the supporting infrastructure that libraries provide for oer raises questions about sustainability. lantern was developed with these questions in mind. the sustainability of an oer depends on the oer’s ongoing ability to meet its educational purpose. for oer initiatives in libraries, there are two primary sustainability concerns to keep in mind: (1) the production and access of oer and (2) the use and reuse of oer by the public (wiley 2006). both of these parts require people, workflows, and technologies. by minimizing the costs of digital infrastructure and maintenance, libraries can increase investments in people and workflows for oer production and access. lantern was designed to reduce the technical complexity of technology stacks necessary for the production, sharing, use, and re-use of oer by meeting these sustainability criteria, adapted from wiley (2006): oer is created in a format that operates equally well across hardware and operating systems oer is available to the public in such a way that edits and adaptations can be made for teaching and learning in a variety of contexts these criteria for the sustainability of oer can be aligned with the principles underlying minimal computing, a framework developed by digital humanists for designing systems that only use the hardware and software resources that are necessary for the task (gil 2015). this thought exercise helped reduce the technology stack lantern uses to create, host, and archive oer. lantern’s stack is focused on structured plain text, static web technologies, version control, and open source software. lantern figure 1. lantern workflow overview. lantern’s workflow begins with common word processing software and ends with a multiformat oer publication. lantern provides a folder template and bash script for using pandoc to convert between manuscript (.docx or .odt), source (markdown, yaml, bibtex), and publication formats (html, pdf, epub) [2]. it is intended to make using pandoc, a comprehensive document conversion tool, easier to use for oer creators and publishers who are generally new to command line programs. lantern aims to teach fundamental digital skills in plain text editing, static web technologies, and open source software in order to encourage the use of minimal technology stacks in digital library projects. “minimal technology stacks” refers to the intentional constraints around the technology components required for a computing process. pandoc is a command line tool that converts an input file of one file format into an output file of another file format. both the input and output files need to be represented in a structured markup language. at the time of this writing, pandoc (version 2.17.1) can read from 39 input file formats and write to 62 output formats, with varying levels of accuracy. each conversion can take zero or dozens of options from 96 that are available. the lantern.sh bash script, files, and folders within the lantern template repository simplify the level of customization available to pandoc users for oer production use cases. for example, the bash function responsible for generating the pdf looks like this: pdf() { # combine all markdown files into one pandoc text/*.md -o _temp/chapters.md # convert markdown to html to pdf pandoc _temp/chapters.md \ --defaults settings/pdf.yml \ --output $output_directory/$output_filename.pdf echo "the pdf edition is now available." } the pdf function first calls pandoc to combine all of the markdown files within the /text/ subfolder to make up the body of the oer, ordering them by filename. the function then calls pandoc again to convert the concatenated markdown file into a pdf using the settings specified in a pandoc defaults file [3]. the defaults file specifies a selection of pandoc options, including the metadata, templates, and pdf settings we want to apply [4]. each output format has its own function within the script following the basic workflow but referencing different defaults files and options. ideally, the lantern template repository serves as an approachable foundation from which users can build their own customizations and features for their projects. structured plain text most people write and edit text using a rich text editor, like those found in microsoft word, google docs, wordpress, and email programs. rich text editors display the style elements of the document, but obscure the semantic elements of the document’s underlying structure. this leads people to use alignment and bold fonts to signal that a specific text element is a heading, which sighted people may understand visually, but machines (like screen-readers) might miss. to avoid this pitfall, lantern provides tips on tagging manuscript files in .docx format with proper headings and styles using word processing software, like microsoft word. document structure is essential for accessibility, formatting, and portability. lantern uses markdown and yaml as the structured plain text representations of an oer’s content and metadata. plain text offers numerous advantages for library-based oer publishers, as tenen and wythoff (2014) explain: plain text both ensures transparency and answers the standards of long-term preservation. ms word may go the way of wordperfect in the future, but plain text will always remain easy to read, catalog, mine, and transform. furthermore, plain text enables easy and powerful versioning of the document, which is useful in collaboration and organizing drafts… plain text is backwards compatible and future-proof. lantern also provides a file structure for an oer project. an example project folder contains a lantern.sh script file, a metadata.yml file, a subfolder (/text/) for markdown files, and several other subfolders containing the templates, styles, and configurations. this structure enforces a separation between content and style; lantern users only need to use the metadata.yml and /text/ subfolder. markdown provides many advantages for academic writing, oer production, and preservation. john gruber, one of its inventors, explains the philosophy of markdown this way (2004): markdown is intended to be as easy-to-read and easy-to-write as is feasible. readability, however, is emphasized above all else. a markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions. here’s an example of markdown syntax: # chapter title introductory paragraph text with **bold** and *italic* text. ## section heading introductory paragraph for the section. another paragraph, but with a [link to a website](https://example.com). ### subsection heading more content, but in list form: list item list item list item markdown is useful for digital publishers and preservationists because it is human-readable in its raw form and machine-readable for converting to html and dozens of other markup formats. lantern mostly follows pandoc’s markdown syntax for textual elements, with additional support for numbered references (for equations, figures, and tables), callout boxes, and exercise questions. lantern organizes the content of an oer project as one or more markdown files in a `/text/` subfolder. each file is named according to its numerical order within the larger project: 001-preface.md 010-introduction.md 020-theory.md lantern uses yaml as its primary metadata format. like markdown, yaml was selected for its readability and ability to be transformed into json and several other structured data formats. the metadata file contains bibliographic metadata fields represented in yaml syntax, for example: title: lantern subtitle: an oer publishing toolkit author: name: chris diaz affiliation: northwestern university name: lauren mckeen mcdonald affiliation: northwestern university keywords: textbooks oer digital publishing github for oer publishing perhaps one of the most powerful advantages for using plain text to organize and produce oer is the ability to use the git version control system and the github ecosystem of collaboration and automation tools. the management, collaboration, and preservation benefits of git and github for library technology projects are well documented (davis 2015, giorgio et al. 2019; becker et al. 2020). lantern demonstrates the benefits of git and github for oer projects. lantern is a template repository on github. it is intended to make it easy for anyone to generate their own oer projects using the same repository structure and files. in practice, a user would login to github, visit the lantern repository, and generate a new repository for their oer project. they would then add their own project’s content and metadata and use lantern’s preconfigured settings to produce their multi-format oer for free. lantern’s pre-configurations take advantage of github actions [5] and github pages [6]. github actions is a programmable workflow automation tool and github pages is a static website hosting service. these features are especially useful for oer publishing. lantern provides documentation to help users prepare manuscripts in common file formats (.docx) and github actions to convert them to markdown using pandoc. the basic workflow involves the following steps: user generates a github repository using lantern as a template repository user uploads .docx files to the /original/ subfolder user makes a commit using the github web interface: “add files via upload” this triggers a github actions workflow that performs the following tasks: provision a hosted virtual machine running ubuntu 20.04+ lts install pandoc 2.17+ checkout the main branch of the github repository convert each .docx file to a markdown file using pandoc move the markdown files to the /text/ subfolder commit this change back to the main branch of the github repository figure 2. logs from using github actions to convert manuscript files with pandoc. after this process, the user is ready to check the markdown files for any conversion errors and make necessary changes using github’s web interface for editing and previewing markdown. figure 3. github’s web interface for code (i.e. markdown) editing. figure 4. github’s web interface for previewing markdown rendered as html. lantern adopts a lightweight continuous integration / continuous deployment approach to oer publishing. lantern is preconfigured to build and deploy the html version of an oer project by default. other output formats, such as pdf and epub, are needed to be enabled by making a change in a configuration file. each time the user makes a commit to either the metadata.yml file or any of the markdown files in the /text/ subfolder, another github actions workflow will be triggered, executing the following tasks: provision a hosted virtual machine running ubuntu 20.04+ lts install pandoc 2.17+ and other lantern dependencies checkout the main branch of the github repository run the lantern.sh script, which builds a static html website for the oer by default deploy the website files to the gh-pages branch once the user enables the github pages feature on their repository, the website files contained within the gh-pages branch of the repository will be made publicly available at a github.io url. from then on, each new commit in a lantern oer’s repository will trigger a rebuild and redeployment of the oer website and output formats. users can disable the public accessibility of their in-development oer project by disabling github pages in their repository and re-enable it whenever they are ready to publish. static web technologies lantern builds a static website for the oer’s metadata, full-text, and downloadable assets (e.g. pdf, epub, etc.). static websites are faster, cheaper, simpler, and more secure than dynamically generated websites because they remove the authentication, database, and application layer typically used by content management systems (newson 2017; varner 2017; diaz 2018). static websites are read-only and require minimal maintenance in order for the public to visit and use the website. their reduced complexity makes them an attractive option for oer publishers and digital archivists (rumianek 2013). lantern transforms the metadata.yml and /text/ subfolder into a multi-page static website using pandoc and bash scripting (lantern.sh). if the user decides to produce pdf, epub, and docx versions of the oer project, each of those documents will be linked from the website available for download. here is output directory for a real-world example of an oer website built with lantern hosted on github pages [7]: css/ js/ .nojekyll cname index.html 010-intro.html 020-casual-inference.html 030-theory.html 040-data.html 050-hypothesis-testing.html 060-surveys.html 070-experiments.html 080-large-n.html 090-small-n.html 100-social-networks.html 110-machine-learning.html 120-conclusion.html 900-appendix-math.html clipperton_emps.docx clipperton_emps.epub clipperton_emps.pdf static websites are compelling options for well-scoped web publications, like oer, monographs, scholarship, digital collections, and exhibits, that libraries hope to maintain in perpetuity. lib-static provides models, concepts, and community around leveraging minimal digital infrastructures and static web technologies for library projects [8]. websites that require content management systems and server-side application software in order to function can become costly and difficult to maintain. oer publications in particular may require years of stability, even if the content is no longer updated. static websites provide that stability. portability with open source software library-based publishers, scholarly communications specialists, and open education advocates developed a keen interest in advancing an open infrastructure for scholarly publishing after the news that bepress, a provider of proprietary institutional repository software, was acquired by elsevier (schonfeld 2017; schonfeld 2019). this news generated new investments in open source software development for libraries and non-profits involved in digital publishing, among many other initiatives (lewis 2017; invest in open infrastructure). this momentum provided the motivation to prioritize the use of portable, cross-platform, open source software as the foundation from which lantern was developed. lantern requires the following software programs: pandoc: a command-line document converter pagedjs: a pdf generator for html styled with css any unix shell interpreter with grep, awk, and sed utilities any text editor git (a source code version management system), pandoc-crossref (a filter for handling cross-references to equations, figures, and tables), and latex (a pdf typesetting system), are not required but can be useful for collaborative or mathematically-rich oer projects. all of these programs are open source and compatible on macos, windows, and linux operating systems. open source software was a requirement for lantern’s design because it is less likely to produce the problem of vendor lock-in, a phenomenon in which a customer becomes dependent upon a vendor’s products (maxwell et al. 2019). lantern teaches the fundamental skills of using markdown, yaml, and command line programs necessary to use other software that performs similar functions if and when lantern’s software dependencies become unusable for any reason. markdown and yaml can be parsed and converted by hundreds of other software libraries in dozens of programming languages. github is provided as a convenience, but it is not required for use. lantern users can download the template files from github, run the software on their own files, and upload the output files to any web hosting service. conclusions reducing unnecessary overhead for the setup and maintenance of systems will ultimately lower technology and labor costs. an oer support infrastructure within an academic library is composed of people, workflows, and technologies. if given a budget to design and implement an oer program, it would be reasonable to think that the administrative roles and editorial processes for oer creation (i.e. the people and workflows) should be the highest priority, with promotion and discovery for oer adoption (i.e. people and workflows) following closely behind. lantern was designed to enable librarians to have a robust publishing workflow with the fewest technology maintenance expenses in order to devote more resources to the labor of oer creation and adoption. by adopting approaches like lib-static and minimal computing, librarians can focus on developing transferable skills rather than learning specific platforms. it is not the goal for lantern to become a “publishing platform” for oer. the goal is to demonstrate how fundamental digital skills with structured plain text, version control, and open source software can help librarians design and deploy sustainable web products for their communities. notes [1]: overview of oer licensing here: https://en.wikipedia.org/wiki/open_educational_resource#licensing_and_types [2]: git repository of lantern on github: https://github.com/nulib-oer/lantern [3]: pandoc documentation on using defaults files for configuration management: https://pandoc.org/manual.html#defaults-files [4]: example of a pandoc default’s file used for managing pdf output settings: https://github.com/nulib-oer/lantern/blob/main/settings/pdf.yml [5]: github actions is a continuous integration and continuous deployment service: https://github.com/features/actions [6]: github pages is a static website hosting service: https://pages.github.com/ [7]: example of the website files generated from lantern (https://github.com/nulib-oer/emps/tree/gh-pages) and the final website (https://emps.northwestern.pub/). [8]: lib-static community website: https://lib-static.github.io/ bibliography becker d, williamson e, wikle o. 2020. collectionbuilder-contentdm: developing a static web ‘skin’ for contentdm-based digital collections. the code4lib journal [internet]. (49). [accessed 2022 feb 23]. available from: https://journal.code4lib.org/articles/15326. davis, r. 2015. git and github for librarians. behavioral & social sciences librarian 34.3. 159–164. available from: https://academicworks.cuny.edu/jj_pubs/34/. diaz c. 2018. using static site generators for scholarly publications and open educational resources. the code4lib journal [internet].(42). [accessed 2022 feb 23]. available from: https://journal.code4lib.org/articles/13861. giorgio s, et al. 2019. what is git/github? – librarycarpentry/lc-git: library carpentry: introduction to git. [internet]. available from: http://doi.org/10.5281/zenodo.3265772. gil a. 2015. the user, the learner, and the machines we make. minimal computing: a working group of go: dh [internet]. [cited 2022 february 24]. available from: https://go-dh.github.io/mincomp/thoughts/2015/05/21/user-vs-learner/. gruber j. 2004. markdown: syntax. daring fireball [internet]. available from: https://daringfireball.net/projects/markdown/syntax. invest in open infrastructure (page 1). invest in open infrastructure. [accessed 2022 feb 23]. available from: https://investinopen.org/about/. lewis dw, goetsch l, graves d, roy m. 2018. funding community controlled open infrastructure for scholarly communication: the 2.5% commitment initiative | lewis | college & research libraries news. doi: https://doi.org/10.5860/crln.79.3.133. [accessed 2022 feb 9]. available from: https://crln.acrl.org/index.php/crlnews/article/view/16902. maxwell jw, hanson e, desai l, tiampo c, o’donnell k, ketheeswaran a, sun m, walter e, michelle e. 2019. setting context. in: mind the gap: a landscape analysis of open source publishing tools and platforms. [accessed 2022 feb 23]. available from: https://mindthegap.pubpub.org/pub/gei072ab/release/2. newson k. 2017. tools and workflows for collaborating on static website projects. the code4lib journal [internet].(38). [accessed 2022 feb 23]. available from: https://journal.code4lib.org/articles/12779. rumianek, m. 2013. archiving and recovering database-driven websites. d-lib magazine [internet]. [cited 2022 february 23]. available from: http://www.dlib.org/dlib/january13/rumianek/01rumianek.html. santiago a, ray l. 2020. navigating support models for oer publishing: case studies from the university of houston and the university of washington. reference services review. 48(3):397–413. doi:10.1108/rsr-03-2020-0019. schonfeld rc. 2017. elsevier acquires institutional repository provider bepress. the scholarly kitchen. [accessed 2022 feb 23]. available from: https://scholarlykitchen.sspnet.org/2017/08/02/elsevier-acquires-bepress/. schonfeld rc. 2019. invest in open infrastructure: an interview with dan whaley. the scholarly kitchen. [accessed 2022 feb 17]. available from: https://scholarlykitchen.sspnet.org/2019/06/12/invest-open-infrastructure/. tenen d & wythoff g. 2014. sustainable authorship in plain text using pandoc and markdown. the programming historian [internet]. available from: https://doi.org/10.46430/phen0041. varner s. 2017. minimal computing in libraries: introduction. minimal computing [internet]. [accessed 2022 feb 23]. available from: https://go-dh.github.io/mincomp/thoughts/2017/01/15/mincomp-libraries-intro/. wiley d. 2006. on the sustainability of open educational resource initiatives in higher education. oecd’s centre for educational research and innovation [internet]. [cited 2022 february 24]. available from: https://www.oecd.org/education/ceri/38645447.pdf. about the author chris diaz (https://chrisdaaz.github.io) is the digital publishing librarian at northwestern university. he is an avid user of static site generators for library-based publishing projects, such as journals, monographs, exhibits, and open educational resources. lantern received financial support from the association of research libraries’ venture fund program in 2020. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – editorial mission editorial committee process and structure code4lib issue 58, 2023-12-04 editorial issue 58 of the code4lib journal is bursting at the seams with examples of how libraries are creating new technologies, leveraging existing technologies, and exploring the use of ai to benefit library work. we had an unprecedented number of submissions this quarter and the resulting issue features 16 articles detailing some of the more unique and innovative technology projects libraries are working on today. this issue features several articles on how libraries are using programming tools and related technologies to enhance work in technical services. enhancing serials holdings data: a pymarc-powered clean-up project discusses the use of the alma api and the python library pymarc to conduct a post-migration clean-up project on serials holdings data. the use of python to support technical services work in libraries features research detailing the various ways libraries are using python in technical services, and pipeline or pipe dream: building a scaled automated metadata creation and ingest workflow using web scraping tools describes the use of python and apis to automate the collection of documents and data online, while a practical method for searching scholarly papers in the general index without a high-performance computer discusses how the r programming language can be used to build a bibliography and visualizations from the general index. in addition to the use of coding, other articles describe using various technology tools to enhance library work. using scalable vector graphics and google sheets to build a visual tool location webapp describes the use of google sheets and svgs, while bringing it all together – data from everywhere to build dashboards and real-time reporting using the alma api and google apps script discuss how the authors used tools like powerbi, powerautomate, and google apps to gather disparate data for dashboards and reporting. other technology tools being used include airtable and aviary, discussed in using airtable to download and parse digital humanities data and leveraging aviary for past and future audiovisual collections respectively. standing up vendor-provided web hosting wervices at florida state university libraries: a case study describes how florida state university libraries is using reclaim hosting’s domain of one’s own web-hosting service to provide web domains to fsu faculty, staff, and students. also included in this issue are articles on technology being used for archives and digital collections, including islandora for archival access and discovery on how unlv implemented islandora 2, and developing a multi-portal digital library system: exploring the technical decision-making in developing the new university of florida digital collections system, about how uf created their own digital collections system using a combination of python, apis, elasticsearch, reactjs, postgresql and more. jupyter notebooks and institutional repositories: realities, opportunities and exploring a path forward discusses how institutional repositories can be used to preserve scholarship housed in jupyter notebooks. issue 58 also includes several articles that explore the potential use of ai in libraries, including the use of chatgpt in beyond the hype cycle: experiments with chatgpt’s advanced data analysis at the palo alto city library and automated speech recognition technologies in comparative analysis of automated speech recognition technologies for enhanced audiovisual accessibility. finally, using event notifications, solid and orchestration for decentralizing and decoupling scholarly communication describes koreografeye, an automated assistant prototype that can enhance scholarly infrastructure, providing value-added services to institutional repositories. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – applying lessons from 8 things we hate about it to libraries mission editorial committee process and structure code4lib issue 13, 2011-04-11 applying lessons from 8 things we hate about it to libraries book review of 8 things we hate about it with commentary on how susan cramm’s points can be applied to libraries. cramm, susan. 2010. 8 things we hate about i.t. boston (ma): harvard business press. coins by timothy m. mcgeary introduction in 8 things we hate about it susan cramm discusses frustrations business leaders have with it and strategies to remove those frustrations in order to form effective partnerships.  while this book focuses on solving the traditional corporate struggle between business leaders and their it group, library technologists are in a unique position in this struggle: right in the middle. the vast majority of academic libraries fall into two categories: libraries that are separate from central it and libraries that are merged with it in one organization. in both of these examples, librarians are the “business leaders” bringing projects, ideas, and requirements to library technologists, the latter of which fit the classic role of it.  but within the larger organization, library technologists turn around seeking the same support from central it.  often this role is a no-win situation, due to lack of power and difficulties in communication.   even though the examples susan cramm offers are focused on the private sector, the principles are just as important to discuss and implement in libraries.  all librarians and library technologists would be wise to heed the lessons in ms. cramm’s book, including those from libraries that either completely control or outsource their entire it infrastructure and support. cramm lays out the following battles with it: service or control, results or respect, tactics or strategy, expense or investment, quickness or quality, customization or standardization, innovation or bureaucracy, goodness or greatness.  for each battle, i will briefly discuss ms. cramm’s descriptions of the battles and suggestions for overcoming these challenges, while providing examples and commentary on their applications to the library.  before going any further, it is important to define a few key terms that ms. cramm repeats frequently: term definition business or line leader generally non-technical, high-level staff who come up with ideas that promote a business idea or end-user goal; in the library, this can be applied to library directors, librarians, or other library staff not directly building or supporting technology. it leader generally technical staff, but sometimes refers to management of technology teams or units, and must make decisions consistent with the enterprise; in the library, this can be applied to a systems librarian who is the one-stop source of all technical solutions. enterprise the entire it infrastructure and technological foundation of the business.  this includes staffing, servers, software, operations costs, recovery, new development, and support.  when enterprise is applied to a people group (also referred to generally as it), it can be assumed a cio or cto is top personnel of the enterprise, and thus the enterprise people group works in the best interest of the cio/cto office. 1) service or control it leaders want to please business experts because they get excited  solving big problems, but it leaders answer to both business leaders and the enterprise, which may make it difficult for it leaders to fully meet the expectations.  business leaders have a present problem and want a present solution, but the enterprise requires long-term sustainability. the line leader wants service the enterprise wants control i have a great idea for a project. yes, but it’s not good enough. the systems need to do a lot. yes, but you can spend only a little. i know what the systems need to do. yes, but you need to make sure others agree. i have a vendor that i would like to work with. yes, but you need to use approved vendors. there’s a package that does everything we need. yes, but you need to comply with standards. i’d like to get started right now. yes, but you have to wait for resources. i’d like the project to get done faster. yes, but you need to follow processes. the project just needs a little more time (or money). yes, but your time is up, and you need to put the project out of its misery. the system’s ready to be rolled out. yes, but you need to comply with the security, regulatory compliance, and business continuity policies. the system has generated great business. yes, but you haven’t increased your p&l targets. the system needs to be upgraded (or enhanced). yes, but you aren’t using what you have. table 1-1 service or control (p. 17) there are four parts to what cramm describes as a balanced approach for organizations to have successful partnerships between business and it leadership.  these are: realizing values (investing in projects with highest roi and holding those investments accountable); serving the business (balancing innovation as an art not a science, thus projects are most successful with clearly defined outcomes, limiting time frame, funding in stages, scope is managed appropriately, and the right resources are assigned); running efficiently (simplifying and standardizing technologies, vendors, operations, and creating efficient automated processes); securing the future (leverage existing it solutions to support strategic business requirements, thus eliminating the multitude of applications and systems needing support, upgrades, or overhauls in the future).  (p. 18-19) the corresponding key to finding a balance in libraries is acting in partnership with both business and it.  it’s not service or control, but service and control.  partners back each other, and look to work together for a successful venture.  librarians need to realize solutions must be sustainable, not just fill a need.  technologists need to realize they can’t solve a problem on their own just because a problem has been stated.  both groups need to think strategically together about how a potential project benefits their larger organization. early in my career, as the lone library technologist in my organization, i made four of the eleven business-leader statements listed in table 1-1 when communicating with central it staff about a project.  in fact, i was so entrenched in the library business requirements that i lost sight of both the relationship dependency i had with central it and the enterprise.  the result was a very vocal argument with their cubicle farm.  regardless of any shared blame, i was both too naïve and too inexperienced to make such demands on the enterprise.  while the hard knocks experience taught me a great deal, i would have rather been given this advice before that project, rather than spending the greater part of the next year re-building the respect i had lost. 2) results or respect the business leader wants results and generally does not understand the it requirements those results depend on.  most frequently the solution has been to go around it directly to a vendor if the business leader does not believe it will produce their required results.  but often it is still required to intervene, at a minimum, or take over entirely.  (p. 29-30) cramm urges business leaders, and i believe this is just as true for library leaders, to consider focusing on building connections and relationships with it instead of merely focusing on the results. (p. 30) make no mistake – this is hard: personalities clash, experiences vary, and alignments differ.  consider: it people are more aligned and/or affiliated with it and their technology than their library organization at large. it staff have different backgrounds or experiences within libraries and library business that makes communication difficult. business and library leaders focus on getting a project done now; it leaders focus on getting the project done right, to sustain and support it. (p. 31) but it is important to realize that both business and it staff hate the control of bureaucracy.  this common point of pain can often be a jumping point in starting to build a sustainable, and respectful, relationship between library leaders and it. another consideration for library leaders in building respect with library it is this statistic: on average, 55% of it human resources are required to maintain, support, or operate it solutions.  10% are typically dedicated to planning, with 35% left over for new development. (p. 34) mileage will vary, but my opinion is that within the library, it technologists spend closer to 70% on maintenance, operation, and support, leaving 30% for planning and new development.  often planning gets an even shorter stick, or maybe no allocation at all, to the detriment of both future development and especially the inevitable, and more difficult, support, thus straining the next cycle of new development. library business leaders can change the rate of results by changing their focus from results to respect.  add an it leader on your team, elevate it to a true partner status, and develop interpersonal connections with it members who are working on your projects.  these are excellent ways to ensure greater rates of success for your projects.  last, seek their input about what they expect a library business leader (you) to accomplish. (p. 38-40) 3) tactics or strategy strategies are not goals, annual objectives, or key initiatives.  strategy is also not about meeting short-term demands that overwhelm our time and resources.  strategy, as cramm defines it, is the foundation used to make daily, monthly, quarterly, and annual decisions, and the tactics concerning goals, objectives, and initiatives. (p. 43-45) because of short staffing in many, if not most, libraries, strategic planning tends to lose out to demands, objectives, and goals.  library leaders decide that demand for applications, and the innate desire to fulfill that demand, suffices for it strategy.  what is often not realized is that building strategy is an ongoing process, and not finite events that occur every three to five years. (p. 60) annual goals lists, while effective for planning, should be checked against and prioritized by your it strategy.  if your library doesn’t have one, now is the time to start making one. but who initiates strategy?  typically both business and it wait for the other, as shown in the following table. business says it leaders should… it says that business should… “partner more with the business to identify how technology can be strategically deployed for the business.” “involve it as early as possible when contemplating changes to the business or new initiatives.” “set common goals for long-term business initiatives and the technology supporting them.” “involve it early and strategically.” “get more involved in the early stages of developing strategy.” “bring in it early; initiate frequent strategy discussions.” “be involved in the strategic meetings within all aspects of the business.” “collaborate with it to develop strategic and operating plans.” “offer visioning workshops to broaden the minds of business leaders.” “involve it in strategy discussions.” table 3-1: who should involve whom? (p. 45) the key is to work together.  it will often not know the business problem, especially in the library, which needs to be solved with an it-based strategy.  likewise ordering it solutions, as one-off applications, will reveal your ineffective it-based strategy and, likely, an unwilling it participant. (p. 46) while this chapter deals with complex strategic positioning, librarians and technologists should follow a similar path when developing it-enabled business strategy, as cramm describes in the figure below: understanding the fundamentals industry, competitive environment, key trends business fundamentals (business outlook, economic model, key metrics, long-term targets) key initiatives brainstorm how to influence performance customers (number, channels, features, pricing) capital (facilities, equipment, inventory, etc.) resources (people, raw materials, energy, etc.) cycle time (sales, order, fulfillment, replenishment, etc.) articulate business objectives as they relate to cost focus, value differentiation, flexibility, agility, growth, and human resources articulate it objectives understand it fundamentals (strengths/weaknesses, key metrics, long-term targets, key initiatives) for each business objective, articulate the role of it and the implication to process, information, and it architecture identify it-enabled initiatives articulate key initiatives, timing, and success measures figure 3-1: deriving it-enabled business strategy (p. 55) the key to all this is gaining quality commitment to the strategy beyond the quality of the idea. (p. 60) ideas come and go; yet even good ideas require strong commitment for a project to become successful.  without commitment from both the library leader and it, a good idea could easily become a failed project.  by building a strong strategic foundation based on respectful communication of both it and library/business initiatives, projects will have a much better chance for successful implementation and on-going support. 4) expense or investment of the 8 things we hate about it, this might be the most complicated to translate to library land because it has such a corporate feel to it.  but in reality, the pieces of demand management, which is the focus of deciding if a project is an expense or an investment, is just as important within library technology projects.  whether demand management is actually performed or not will likely vary based on the size and it-maturity of the library.  whatever level of demand management is implemented plays an important, if not vital, role in successful technology ventures. so what is demand management?  cramm defines it as the “process of allocating limited resources to the overall benefit of the enterprise.” (p. 64) continuing in the definition, demand management is a cycle and a process involving the following steps: strategic planning – as addressed above, this provides the context for prioritization of investing in it-enabled projects portfolio management – provides an on-going guidance on project investment decision and project review decision rights – the principle that business leaders have authority to decide what it is needed and it leaders have authority to decide how it is delivered financial planning determines amount of funding or price it costs for business to find external funding prioritization – occurs parallel to and in conjunction with the four above steps value management – accountability for defined business value and monitoring of actual results (p. 64-65) of all enterprises, libraries can surely understand the definition, and impact, of limited resources; therefore it is even more critical for libraries to implement demand management.  without using pieces like strategic planning and portfolio management, libraries can become easily overwhelmed with too many projects on-going or too many applications to support long-term.  at the same time, it is important that each side, library business leaders and it leaders, be responsible for their areas of expertise.  not only does this maintain balance within project-planning relationships, but it also keeps accountabilities balanced when evaluating outcomes. of all areas, value management is the step most often ignored or implemented poorly in all businesses that use it.  we easily attempt to predict or define the value of a project beforehand, but do we honestly seek to evaluate whether that value was returned?  libraries rarely have a financial return on investment, so usage statistics are often the most reliable return, albeit sometimes misleading.  regardless of the metric used to rate the return on investment, it is prudent for libraries to take the time to evaluate whether existing projects are as valuable in operation as they were predicted during planning. 5) quickness or quality only half of it projects deliver successfully or on time, on budget, and on spec.  12% deliver too little or are canceled, 33% too late (and by an average of 71% longer than scheduled), and more than one-third are over budget (by an average of 41%). (p. 85-86) the biggest reason is that defining specifications and requirements is very hard, and iterations take time to get it right.  this naturally results in a frustration between “done” and “done enough.”  (p. 86) the balance is between getting it done and getting it done right.  otherwise, an organization may find that being out of balance results in standalone solutions that are difficult to integrate or over-engineered solutions that miss the business requirements.  cramm suggests, however, that project success can be increased through these steps (p. 89): define a clear objective for the business and people on the front lines engage the intellectual, emotional, and tangible aspects of the people affected by this new project integrate and streamline business processes leverage existing technology to the fullest use fast-cycle approaches, using best human resources and delivering every 3-6 months beyond cramm’s suggestion of delivering every 3-6 months, there is an increase in investment within higher education on agile (also known as scrum) project methodology.  some colleges and universities have joined together to create an organization called scrumu (http://www.scrumu.edu) to support implementations of scrum project management.  i have implemented agile project management at lehigh with some initial success. [1] agile allows both a quick delivery of solutions with the ability to revise requirements and specifications before going too far down the wrong path.  as always, results will vary based on the implementation, but it can provide a jumpstart to solving the dilemma cramm is describing in this section. 6) customization or standardization cramm compares moving a software solution into production to moving into an exclusive community – it must measure up to the existing standards. (p. 108) how “gated” the higher education and library production environments are varies widely.  much commentary has been made recently about enterprise versus toy projects in the code4lib community (see [2] hellman, 2010, for example), but in reality a production environment there are existing standards that must be met.  these existing standards usually (and should) contain requirements to provide adequate documentation on how the application was built, proves the application was thoroughly tested, and that it meets the organization’s requirements of compliance, security, and service.  the benefit of such scrutiny, once accepted, is that your project acquires security, backup, performance monitoring, and detailed support. (p. 108) but cramm adds that you still need to do some more work (p. 109-110): train users thoroughly to use the full application resolve technical issues quickly maintain and enhance the application secure funding/resources to support all of the above the rest of the chapter cramm focuses on the need to reduce the total cost of running technology.  it is important, as the business leaders in the relationship between the library and central it, to consider the impact our new project has on the it enterprise.  do we really need a separate server?  can an existing database server be leveraged?  can we piggyback on a storage solution?  are we utilizing enough of the servers and storage already provisioned for us?  libraries should think carefully about these questions and their respective answers when considering the deployment of our new technology. 7) innovation or bureaucracy cramm states that 37% of it leaders and 50% of business leaders agree: “it is overly bureaucratic and control oriented.” (p. 125) technologists would rather have business leaders marvel at a successful project than complain about why it says it can’t be done.  but it struggles daily with an overwhelming amount of project requests, on top of supporting existing enterprise solutions. (p. 126) three key areas bog down it (p. 126-127): dealing with existing complexity of mixed and matched solutions, unstandardized legacy systems, and standalone applications.  reducing this complexity would significantly reduce cost. promoting enterprise interest – once it finds and implements standardized technology, it becomes a strategic initiative to leverage it where possible, often at the frustration of business leaders looking for new innovations. lack of resources – it is often not proactive in supporting the organization or driving business decisions because it lacks resources to be proactive while standardizing and supporting the current enterprise. to create more innovation, library leaders need to take more responsibility to be innovative themselves.  this requires a more hands-on approach in partnership with it.  this removes the “reading of the mind” aspect of the business-it relationship.  requirements documents do not do this – person-to-person activity does. (p. 129) secondly, ask it to create a solution that allows you to do more without their need to intervene. gain their trust by asking them to build the functionality for you to do more on your own, while admitting that any harm you do will have serious consequences in a system clean-up.  take accountability for that privilege and power. (p. 129-130) finally, forge a new partnership, as cramm shows in table 7-1 from page 139: helping it help the business helping the business help it embrace enterprise interests clarify and streamline decision making strengthen relationships with it create a business-savvy and service-oriented it organization develop it-enabled business strategies facilitate the development of it-enabled business strategies and enterprise architecture generate value from it-enabled investment ensure that it-enabled value is realized deliver quickly and with quality deliver quickly and with quality focus customizations on necessary differences drive down year-over-year lights-on expenses invest in it smarts enhance business partner self-sufficiency assume permanent accountability for the it assets that fuel your business fully democratize it table 7-1: leadership principles of the new partnership 8) goodness or greatness cramm hopes that by addressing the first seven issues, business leaders can promote it from being just good to great.  this will happen from encouraging more it-smart business leadership to treating it as a partner, not as a service, as well as following the entire organizational strategic chain of planning, investing, innovating, delivering, and operating. (p. 141-143) confronting the difficult facts of supporting the entire enterprise, cramm asks us, as business leaders to our it, to answer these questions (p. 143-144): what have i learned? what frustrates me about it? how am i contributing to my frustrations with it? what am i going to do about it? but while we may think we know what we need to change, cramm advises that it is important to do a reality check with our it partners.  get feedback and own up to it. (p. 146) cramm gives excellent examples about how good it can be, and realistic examples of how bad it can get without the proper leadership and partnership. conclusion it is the responsibility of library leaders to set the tone of partnership with it, and our role as library technologists to see both sides of the coin.  library technologists have a unique opportunity to serve library organizations as both it providers to librarians and business leaders to the larger supporting it organization.  susan cramm offers excellent advice, strategy, and most importantly examples that can be used to position library technology in effective partnerships within our organizations.  it is not an exaggeration, in the ever-increasing technological era we live in, to describe library technology as a keystone for our organizations.  but in taking on that position, it is even more important to heed the strategic advice of leading effectively between the business of libraries and the enterprise of it. references: [1] mcgeary, timothy m.  january 2011. implementing agile at lehigh university. team dynamixhe community column [internet]; available from: http://community.teamdynamix.com/columns/73/implementing-agile-at-lehigh-university [2] hellman, eric. february 8, 2011. toys and tools vs. the enterprise at code4lib. go to hellman [internet]; available from: http://go-to-hellman.blogspot.com/2011/02/toys-and-tools-vs-enterprise-at.html about the author tim mcgeary serves as the team leader of library technology at lehigh university libraries, and is responsible for the technology infrastructure, specifically focusing on leading the development of efficient and dynamic solutions to connect library collections to users.  tim has presented nationally and regionally on library technology development, managing electronic resources, open source solutions, and the kuali open library environment (ole).  tim currently serves as kuali ole functional council member for lehigh university, the code4lib journal editorial committee, the lyrasis advisory panel for open source initiatives, and the niso erm data standards & best practices review committee. subscribe to comments: for this article | for all articles 2 responses to "applying lessons from 8 things we hate about it to libraries" please leave a response below: jenn riley, 2011-04-12 fantastic writeup tim. your insights applying this model to libraries strongly resonate with me, highlighting issues i and many others are currently struggling with. thanks for this. timmcgeary, 2011-04-14 you are very welcome, jenn. it is my pleasure. thank you for your kind comments. leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – a video digital library to support physicians’ decision-making about autism mission editorial committee process and structure code4lib issue 23, 2014-01-17 a video digital library to support physicians’ decision-making about autism a prototype digital video library was developed as part of a project to assist rural primary care clinics with diagnosis of autism, funded by the national network of libraries of medicine. the digital video library takes play sample videos generated by a rural clinic and makes it available to experts at the autism spectrum disorders (asd) clinic at the university of alabama. the experts are able to annotate segments of the video using an integrated version of the childhood autism ratings scale-second edition standard version (cars2). the digital video library then extracts the annotated segments, and provides a robust search and browse feature. the videos can then be accessed by the subject’s primary care physician. this article summarizes the development and features of the digital video library. by matthew a. griffin, mlis, dan albertson, ph.d., and angela b. barber, ph.d. introduction a prototype video digital library was developed as part of a partnership between primary care medical clinics and the university of alabama, a project funded by the national network of libraries of medicine, southeastern/atlantic region (nnlm sea). this article summarizes the current functionality of a prototype video digital library aimed at supporting physicians treating potential autism cases and describes the developmental processes and implemented system components. caregivers of children who fail an autism screener at the primary care clinics partnering with this project may be asked if trained staff at the clinic can conduct a video-recorded structured play-sample for further analysis at the university of alabama autism spectrum disorders (asd) clinic. these videos (children playing) can be uploaded to the video digital library, which in turn makes them available to the asd clinic, where teams of experts can select full play-sample videos to examine within a secure area of the video digital library. observations, scores, and other clinical notes can be attached or appended to the video (i.e. annotated) using an integrated version of the childhood autism ratings scale-second edition standard version (cars2). the video digital library then uses evaluation data and other input from autism experts to segment the full videos, which would otherwise be inefficient for a child’s primary care physician to use within the context of patient care or to navigate to the meaningful observations within a video. researchers in this ongoing project anticipate that physicians will be able to use the processed shorter video clips, generated from the full play-sample videos, and corresponding embedded feedback from autism experts, to make decisions about patient care. the digital library ultimately enables physicians and autism experts alike to search and browse usable individual video clips of patients by score, test type, gender, age, and other attributes, using an interface designed around the envisioned users (i.e. health professionals) and basic human computer interaction (hci) metrics. having the processed video clips accessible through the digital library allows physicians to compare and contrast different patients and observations across a larger video collection, which can, ultimately, enhance understanding about autism. the video digital library is a secure, web accessible, video retrieval system that uses an apache web server and ssl certificates for information transmission over hypertext transfer protocol (https). php, mysql, javascript, jquery, python, and ffmpeg are the current developmental tools used for implementation and ongoing maintenance of the video digital library: mysql is the database system of the video digital library. php enables database connectivity and added security. python programs execute the video processing functions of the video digital library. the python functions segment and index the contributed video files by handling the naming and iterative functions. ffmpeg manipulates the video files. details of the video library’s implementation is presented in this article, along with plans for future development, which will further examine certain characteristics of clinical videos for improving search, browse, and application of video as a resource in the context of patient care. technical innovations of this project include the design of user interfaces to collect, order, and effectively present different information formats for supporting clinical tasks and decision-making. key innovations of video digital library in this section, two important pages of the digital library with unique interface features will be detailed. the design and functionality of the annotation and search pages contain key innovations of the video digital library. annotation page the annotation page enables experts of the ua asd clinic to score children and their behaviors while watching a video play session in the digital library. this page incorporates a digital adaptation of the childhood autism ratings scale-second edition standard version (cars2) for conducting patient assessments (schopler, et. al., 2013)]. definitions of scores and categories were inserted by the developers into the annotation page so that the autism experts could quickly reference the meanings of each score across all categories. each category (e.g. imitation, object use, relating to people, etc.) of the cars2 has a function that allows the autism experts to indicate up to three time points, along with an accompanying notes field for times indicated. the autism experts, using the video digital library, manually input time points in mm:ss format and input text in the notes field. the form does not allow for saving drafts; however, since the autism expert must watch the full video to conduct assessments and complete the annotation form, this was deemed to not be a necessary function. once the form is submitted, a record for the video is transmitted to the database, and the full video is marked for processing by programs used to extract the video clips. full videos are processed, and individual clips of notable tests are extracted and created. therefore, corresponding search results of individual clips are available on the site within 15 minutes of the annotation form being completed and submitted. figure 1. screen capture of the annotation page. search page the search functions of the video digital library comprise the other innovative page. first, a user can narrow search results dynamically by using the picnet table filter (tapia g … [updated 2013]), described further below. the filter creates a dropdown menu that the user can use to limit the search results by hiding the content of filtered table elements. in addition to the dynamic content, such as age or patient id being filtered, the static definitions of the scores displayed can be refined by keyword search. all limiters of the picnet table filter can be used in combination with each other to limit results shown. in the event of a system error, the clear selection button placed at the top of the results page will refresh and initiate a new session. as important as these two pages are for users of the video digital library, the overall functionality is dependent on its systematic ability to segment video files, i.e. extract video clips. figure 2. screen capture of the search page with picnet filter. development of video digital library the video digital library is a new application that relies on a number of open source tools. open source tools used for implementation, other than those briefly mentioned above, are described in this section. open source tools used with the assortment of processes required to build this interactive video digital library, the primary developer looked for open source tools that would provide the means to develop and implement the needed functionality. the smarty template engine design formed the building blocks for the individual webpages (basic syntax … [updated 2013]). smarty “tags” allow variables to be securely shared across multiple webpages, which helped avoid having to store variables in the address bar or in cookies. smarty tags also provide the compartmentalization of the development process, and the smarty template engine permits each page, specifically the annotation and search pages, to have the required flexibility of unique programming and functionality. adminer (formerly phpminadmin), an open source program, is used as a database management tool. adminer minimalized installation steps and requirements (given it is a single php file) and provided a clean interface for the database manager. picnet table filter, as presented above, provided an open source solution for the search page, providing the ability to filter results once the main search query is submitted. picnet was developed with jquery, and thus can dynamically change the results displayed through keyword or dropdown menu. having the ability to search and browse by both known and exploratory criteria is crucial for a digital library type of retrieval tool. security security of the video digital library was a significant consideration throughout development and implementation; several security measures and methods were implemented. these barriers were designed to make it unlikely that an unauthorized user or program could access information, such as the videos, clinic notes, and scores, from the video digital library. the primary security features included the php templates to hide webpage extensions in an attempt to camouflage the language in which webpages were written. in addition, secure sessions were also implemented, which were tested with several hacking scenarios by the primary developer. these tests helped suggest several security approaches and enhancements. one specific change, implemented by the primary developer, was the addition of a conditional statement to test the user’s ip-address, saved from the current login session. the temporarily saved ip-address will block a user if their ip-address changes during a session. when this happens, the user is presented with a login screen for authorized users to reenter their credentials. video being the most important aspect of the video digital library, we used caution in designing the mechanism for delivering video. we decided to use flash early on in development process so that older web browsers would be able to play the video. but without a video streaming server, flash would download a copy of the video to the user’s computer causing a serious security issue for the video digital library. we researched several methods to provide video streaming for the video digital library, and module h264 was found to fit our needs. after installing h264 several changes to the coding were necessary. this was an easy task due to the video digital library referencing one function in order to play video. making the necessary changes there allowed the h264 module to function for the entire video digital library. full directions on h264 available from http://h264.code-shop.com/trac. to prevent sql injection during user searches, the system uses php data objects (pdo) extensions (achour m … [updated 2013]). pdo extension is a database driver for php that is database specific. for this project we used pdo_mysql, but several others are available at: www.php.net/manual/en/pdo.drivers.php pdo also cleans any sql queries of any trouble caused by characters such as: ‘)’, ‘ ;’, ‘}’, and ‘]’. the example code below shows how we used pdo to insert records into the database. $database; try { $database = new pdo('mysql:host=127.0.0.1;dbname=`database_name`, `user`, `password`); //solution to connection error by adding these following lines. $database -> setattribute( pdo::attr_default_fetch_mode, pdo::fetch_assoc ); $database -> setattribute( pdo::attr_persistent, true ); } catch (pdoexception $error) { $database = new pdo('mysql:host=localhost;dbname=`database_name`, `user`, `password`); $database -> setattribute( pdo::attr_default_fetch_mode, pdo::fetch_assoc ); $database -> setattribute( pdo::attr_persistent, true ); } figure 3. connection to the database using pdo //prep the query to the database the appropriate info about clips $query = $database->prepare(<<execute(array( ':sessionsid' => $_sessions['sessionsid'], ':patientid' => $patientid, ':ratingid' => $ratingid, ':path' => "$/$filename.mp4”, ':key_frame' => "$/$filename.jpg”, ':user_id' => $_session['userid’] )); figure 5. writing to the database using pdo as seen above, the pdo function was called to connect to the database and use the :table_field => $php_variable to insert each record. this approach prevents a user from conducting a search for “child play; truncate table patient;” and causing everything in the patient’s table to be erased. video processing the program to automatically segment the video into individual clips required multiple iterations, or versions. one such version did not use python, but instead called ffmpeg directly from php. however, in order to quickly develop a script to control for file naming and check for file creation, we used python. the main function of the python script is to call ffmpeg for the clip creation and keyframe extraction, from the clips, along with creating filenames and file paths. clip extraction ffmpeg enables video clip extraction. the correct syntax to create a usable video file was discovered by trial and error. the best solution was to use the application hand brake, which uses ffmpeg to process video. as a function of the software, handbrake displays the command line parameters used when converting video. the resulting code from handbrake is “ffpmeg, ‘-y’,’-i’, filename,’-vcodec’,’libx264’,’-s’,’320×240’…” this is then adapted to use in the python script as seen below. def cut(movie, start, clip_name): #calls ffmpeg to slice video if(subprocess.popen(['../ffmpeg', '-y', '-i', movie, '-ss', str(start), '-t', '15', "-vcodec", "libx264", "-s", "320x240", "-crf", '20', "-async", '2', "-ab", "96", "-ar", "44100", clip_name])): sleep(120) #solves racing condition when clips are long figure 6. primary python function as seen in the comments of the code, a race condition was discovered late in the development process, and the quick fix was to add a wait command. it is bad practice to depend upon a wait command to fix a bug. however, as this script is running on the server, the user will never be aware of this wait time. in addition, this fix appears to be one of the few ways to fix this race condition known as, “time of check to time of use,” or tocttou. tocttou explains the race condition which occurs in the fraction of a second between the check for a file and the use of that file. the race condition is in that fraction of a second when the file can be deleted, moved, or accessed by another program causing the file to be inaccessible (mathias et. al 2012). since this is not a unique problem to the python language, the effect can only be mitigated (pilgrim m … [updated 2013]). the race condition is compounded by the twelve ranking categories, each one having the possibility of three video clips being created. so, at most, thirty-six video clips and keyframes are created. having the program wait was the best solution, as there is no reliable method to check that a file is not in use or readable prior to calling ffmpeg. keyframe extraction keyframes are individual frames, i.e. still images, used to represent the visual contents of a video to a user through a user interface. for this project, once a video clip is created, a keyframe (i.e., visual surrogate) is needed to represent the clip to users in the search results page. the keyframes as extracted and employed for the video digital library are stored as jpegs in order to keep file size down. keyframes are selected by simply choosing and extracting the middle frame number from a video clip and designating that as the visual surrogate. for example, if a clip has 100 frames, approximately the 50th frame in the clip would be extracted and designated as the “keyframe.” this keyframe selection approach has proven to be just as effective as other more complex image processing approaches, previously evaluated for detecting the “best” keyframe through content-based comparisons. extracting the middle frame from the video was made a bit more complex in this context since there was no control over the length of the video uploaded to the website. the best solution was redirecting the standard output of ffmpeg using the parameter ‘stdout = pipe”, shown in the following code sample. the output contains detailed information of the video file created by ffmpeg. another function writes the output to a text file in order to generate the duration of the video. extracting duration is detailed below. def logfile(clip_name): result = subprocess.popen(['../ffmpeg', '-i', clip_name], stdout = pipe, stderr = stdout) return [result.stdout.readlines()] figure 7. python function for redirecting the standard output of ffmpeg. b'ffmpeg version n-43574-g6093960 copyright (c) 2000-2012 the ffmpeg developers\n' b' built on aug 15 2012 05:18:13 with gcc 4.6 (debian 4.6.3-1)\n' b" configuration: --prefix=/root/ffmpeg-static/64bit --extra-cflags='-i/root/ffmpeg-static/64bit/include -static' --extra-ldflags='-l/root/ffmpeg-static/64bit/lib -static' --extra-libs='-lxml2 -lexpat -lfreetype' --enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable-zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-gray --enable-libass --enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx\n" b' libavutil 51. 69.100 / 51. 69.100\n' b' libavcodec 54. 52.100 / 54. 52.100\n' b' libavformat 54. 23.100 / 54. 23.100\n' b' libavdevice 54. 2.100 / 54. 2.100\n' b' libavfilter 3. 9.100 / 3. 9.100\n' b' libswscale 2. 1.101 / 2. 1.101\n' b' libswresample 0. 15.100 / 0. 15.100\n' b' libpostproc 52. 0.100 / 52. 0.100\n' b"input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/videos/demo01/1/1/3.mp4':\n" b' metadata:\n' b' major_brand : isom\n' b' minor_version : 512\n' b' compatible_brands: isomiso2avc1mp41\n' b' encoder : lavf54.23.100\n' b' duration: 00:00:15.03, start: 0.000000, bitrate: 522 kb/s\n' b' stream #0:0(und): video: h264 (high) (avc1 / 0x31637661), yuv420p, 320x240 [sar 1:1 dar 4:3], 385 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc\n' b' metadata:\n' b' handler_name : videohandler\n' b' stream #0:1(und): audio: aac (mp4a / 0x6134706d), 44100 hz, stereo, s16, 128 kb/s\n' b' metadata:\n' b' handler_name : soundhandler\n' b'at least one output file must be specified\n' figure 8. raw output of ffmpeg as written in the text file. the script iterates over each line of the ffmpeg output, as seen above, checking for the string “duration” and then extracts the duration of the full video by slicing the string. a conditional test for duration and using string slicing calls the process for retrieval of the full duration video. the appropriate timing to extract the keyframe was computed by converting the given duration of a clip into seconds and dividing it by two. with the middle of the clip calculated, python names the clip iteratively with the regular expression (‘%s’ % (count)). the clip number or file name matches the resulting keyframe name. for example, python names the video full_video, then each extracted video clip numbered sequentially (e.g. 1.mp4, 2.mp4). the filename for the keyframe matches that of the video clip with a .jpg file extention. the full video, extracted clips and representing keyframes for each submitted play sample are all saved in a separate folder. the file path for each play sample (i.e. session for a child) is built using the patient id and the session id. for example, the path for the second session, “play sample,” of patient 1 would be ‘/data/1/2’. using python in conjunction with ffmpeg was challenging, but the end result is a digital library application able to process video and extract shorter clips according to input from the autism experts. future development at the conclusion of the primary developmental stages, system developers compiled a list of tools that would further enhance implementation and functionality of the video digital library. the annotation and search pages, discussed above, were notably complex to design and implement. future development of the system may potentially benefit by incorporating ajax (asynchronous javascript and xml) for making the annotation form more dynamic and user friendly, considering ajax allows webpage content to change and update without reloading the full webpage (ajax tutorial … [updated 2013]). one obstacle remains for any future development of this system. when patient age is used to search for clips, several clips are returned, but one of the clips returned does not match search criteria. it is not an error with the database entry and must be an error in the php code. further development of the search page is at the top of the developers’ priorities for future development due to the importance of being able to search the digital library using different user criteria. search is further complemented by browse functions, e.g. for browsing search results, which is significant for visual collections, as users expect visual feedback and surrogates to peruse a collection and to base relevance judgments. conclusion open source tools and platforms were combined to make a stable, secure, and innovative video digital library. lessons learned from the development of this system motivate future research and experimentation. this project demonstrates potential for enhancing clinical services in underserved areas. furthermore, the prototype video digital library can be used to streamline patient assessments by autism experts and provide enhanced information back to the patient’s primary physician for making clinical decisions. future research with this project can also employ the prototype presented here to examine how video digital libraries enhance understanding of autism among physicians and physician/caregiver communications. in addition, findings from future research may lead to health literacy centered designs of video digital libraries. references achour m, betz f. php manual [internet]. [updated 2013 nov 15]. www.php.net.; [cited 2013 nov 17]. available from: http://www.php.net/manual/en/ back ajax tutorial [internet]. [updated 2013 nov 17]. www.w3schools.com.; [cited 2013 nov 17]. available from: http://www.w3schools.com/ajax/ back bellard f. ffmpeg documentation [internet]. [updated 2013 nov 17]. www.ffmpeg.org.; [cited 2013 nov 17]. available from: http://www.ffmpeg.org/documentation.html basic syntax [internet]. [updated 2013 nov 13]. www.smarty.net.; [cited 2013 nov 13]. available from: http://www.smarty.net/docs/en/language.basic.syntax.tpl back mathias p., gross t. protecting applications against tocttou races by user-space chacing of file metadata. 2012. acm sigplan notices; 47(7):215-226. available from: http://libdata.lib.ua.edu/login?url=http://search.ebscohost.com/login.aspx?direct=true&db=edswsc&an=000308657200020&site=eds-live&scope=site back pilgrim m. 2009. [internet]. 2. apress.; [cited 2013 nov 17]. available from: http://www.diveinto.org/python3/ back schopler e, van bourgondien m. childhood autism rating scale, second edition (cars2) [internet]. [updated 2013 nov 15]. pearson.; [cited 2013 nov 15] . available from: http://www.pearsonclinical.com/psychology/products/100000164/childhood-autism-rating-scale-second-edition-cars2.html. back tapia g. picnet table filter [internet]. [updated 2013 nov 17]. www.picnet.com.au.; [cited 2013 nov 17]. available from: http://www.picnet.com.au/picnet-table-filter.html back about the authors matthew a. griffin is a first year doctoral student in the college of communications and information science, university of alabama where he recently received an mlis. matthew is interested in researching digital libraries as part of his doctoral program. dan albertson is an associate professor in the school of library and information studies, university of alabama. his work can be found in places such as the journal of the american society for information science and technology, journal of documentation, journal of information science, journal of education for library and information science, and others. dan’s primary research interest is interactive information retrieval; he holds a ph.d. in information science from indiana university, bloomington. angela barber is an assistant professor in the department of communicative disorders, university of alabama. her research focuses on early identification and intervention with young children who have autism. she holds a ph.d. in communication disorders from florida state university. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – archidora: integrating archivematica and islandora mission editorial committee process and structure code4lib issue 39, 2018-02-05 archidora: integrating archivematica and islandora “archidora” is shorthand for the publicly available integration between the open source software packages archivematica and islandora. sponsored by the university of saskatchewan library, this integration enables the automated ingest into archivematica of objects created in islandora. this will allow institutions that use islandora as a digital asset management system, particularly for digitized material, to take advantage of archivematica’s standards-based digital preservation functionality, without requiring staff doing digitization to interact with archivematica. this paper outlines the basic functionality and workflow of archidora; provides an overview of the development process including challenges and lessons learned; and discusses related initiatives and possible future directions for development. by tim hutchinson project background and institutional context the university of saskatchewan library has a long and productive history of digitization projects, with the first “virtual exhibit” launched in 1995, and over 50 thematic projects, both institutional and consortial, completed since then. until 2013, the university of saskatchewan archives and the special collections unit of the university of saskatchewan library were organizationally separate, but collaborated on projects and both received systems/it support from the library. starting in 2005, the university archives moved to a home-grown database for digital projects, allowing us to more systematically create metadata records and store high resolution images. in the meantime, special collections had started using contentdm for various collections. the initiation of the saskatchewan history online (sho) project in 2011 allowed the university library to move towards a more programmatic approach to digital initiatives. sho, originally dubbed the saskatchewan multitype digitization initiative, was a three-year provincial project funded by saskatchewan’s ministry of education – the government home of both the provincial library and the multitype library board. the university of saskatchewan library was contracted to coordinate the project, with a committee of the multitype library board, the saskatchewan digital alliance (sda), serving as an advisory body to the project. sda planning as well as discussions within the university library helped identify digital preservation as an important component of the sho project. for too long, our projects had produced extensive and unique digital content, but without any preservation plan or infrastructure beyond basic backups. a consultation with artefactual systems (lead developers for archivematica) in january 2012 set the wheels in motion towards our selection of archivematica as a preservation system to ultimately manage digital content from various sources and systems. in addition to islandora, which was selected as the digital asset management system for the sho project (and as a replacement for contentdm), we were also using dspace for an institutional repository of electronic theses and dissertations. of course, we also had material from many different digital projects (managed in legacy systems or as flat files) – not to mention born digital records. we thought that addressing the preservation of digitized material would be a good way to establish an infrastructure for digital preservation that could later be used for other systems like dspace, as well as the more complex area of born digital records. development process the main development work on the archivematica/islandora integration was completed between 2013 and 2014, with additional enhancements and bug fixes since then. overall, the project has moved much more slowly than anyone had anticipated – during the design, development, and deployment stages. discussions with artefactual systems started later in 2012, with design requirements partly informed by an islandora camp session that summer. the first quote was received in october 2012. however, this focused on archivematica to islandora workflow. further discussion about requirements – especially the requirement to have this process be automated, with staff doing digitization not needing to interact with archivematica – led to a more detailed project outline, and the clarification that development of islandora would also be required. artefactual took the lead on the project, coordinating with discovery garden, which would ultimately be the subcontractor for the development on the islandora side. the complexities of the technical interactions between the two systems, clarifications relating to university of saskatchewan workflows, and time constraints for all parties meant that a substantially revised quote did not arrive until may 2013. a contract was approved for work to take place between october 2013 and january 2014. ultimately this main phase of work was completed in september 2014. testing during the first phase of development revealed some limitations in the archidora module, i.e. desired functionality which had not been considered. in particular, we wanted to add a configuration option to suppress archivematica ingests for a given collection; to add better handling for compound objects and books; and to add the ability to delete obj datastreams (i.e. the master objects) in bulk. we undertook a separate contract with discovery garden, during fall 2014, to address this. since then, progress on moving into production has been slow, and we are now targeting early 2018 for this milestone. however, i am risking becoming the boy who cried wolf: i have declared that deployment was close at least a few times over the last couple years. there have been a number of factors contributing to this. both archivematica and islandora are under active development, and have many moving parts. on a few occasions, a change to another part of the code, or even configuration changes, have led to regressions or unexpected behaviour. in some cases it has been difficult to quickly assess whether the source of the problem is in islandora or archivematica. and resolving one issue has sometimes surfaced others. our lead in-house islandora developer made some changes to the archidora module in order to allow recursive use of the drush script. there was an understable learning curve involved, and the usual competing priorities for time. in tying up loose ends on the archivematica side, we did not initially formalize or schedule the work required. this work got done through a combination of goodwill on the part of artefactual (especially for a few items out of scope of the original contract), and the university library’s support contract with artefactual. as a result, timelines were a lot longer than would have been the case with a paid contract. design and functionality in general terms, objects are first ingested into islandora. these are added to a deposit in the archivematica storage service. after each deposit is finalized (reaching a certain size or time limit), they are sent to the archivematica dashboard to be processed, with an archival information package (aip) as the final output. this schematic from artefactual outlines the detailed workflow as initially developed. it remains largely accurate. figure 1. islandora/archivematica integration workflow, as originally designed [1]. the islandora/archivematica integration was achieved through the development of an islandora module called archidora; and through code changes to both the archivematica dashboard and storage service. on the archivematica side, a key component, which will facilitate integrations with other systems, was the development of a sword api, part of the storage service’s rest api. the sword api “allows 3rd party applications to automate the process of creating transfers” (sword api [updated 2017]). the following walks through the basic configuration, and the workflow for an object starting with its ingest into islandora. configuration – islandora configure the archidora module in islandora, with basic settings like storage service url, username and api key. you can also configure the maximum size of the transfer and the length of time (maximum age) before the transfer will be finalized (the settings are labelled aip but it’s really the deposit/transfer). after a transfer is finalized, no more objects will be added to it, and the processes on the archivematica side can begin. settings for the size and maximum age will largely depend on institutional workflows as well as server capacity (e.g. size of transfers that archivematica can handle). maximum size is likely more important, but the maximum age ensures that a transfer will not get abandoned if enough objects are not added to it. the cron time setting helps account for the ingest of compound objects, so that the xml file documenting the relationships between objects is ingested along with the objects. figure 2. archivematica integration configuration in islandora configuration – archivematica in the storage service, add a location … figure 3. configuration of location for fedora deposits in archivematica storage service … and a corresponding space for fedora deposits figure 4. configuration of space for fedora deposits in archivematica storage service the pipeline also needs to be configured as for any archivematica deployment, but to ensure that transfers are approved automatically, the api username and key need to be populated. figure 5. configuration of pipeline in archivematica storage service you can also configure a post-store callback, so that archivematica will update islandora with information about objects that have been ingested and therefore can be deleted from islandora. this generates a list in islandora’s “manage” tab for the relevant collection for manual processing, with an interface allowing either individual or bulk deleting (see figure 18). institutions may want to use this functionality to avoid redundant storage of the master digital objects, if the master no longer needs to be accessible in islandora. figure 6. configuration of post-store callback in archivematica storage service. in archivematica, it is important to make sure that the processing configuration is set up not to require any user intervention. figure 7. archivematica processing configuration if your digitization workflow ensures that you’re already reliably creating preservation quality files, you may also want to disable certain default normalization rules. for example, if a tiff file is identified in the format policy registry as a preservation format, archivematica will still normalize it if a normalization rule is enabled for that format (which is the default for tiff files). this will result in both the original file and the normalized file being saved in the aip. the ability to disable a rule was added as part of archidora development, but an arguably more intuitive enhancement would be to automatically skip the normalization task if an object is already in a preservation format. figure 8. archivematica preservation planning entry islandora workflow now we’re ready to bring some objects into islandora. if you use the zip importer, then it’s best to configure it to use the filename as the datastream label (e.g. filename.tif rather than obj). if you use a generic datastream label, archivematica will still be able to ingest the objects, but there may be microservices that return errors due to the lack of a file extension. in particular, ffmpeg has known issues. figure 9. configuration of islandora’s zip importer you can use any method to ingest objects into islandora. archivematica interacts with the fedora repository, not the drupal frontend. there is also a drush script available to do batch transfers of objects already in islandora. for this example, we have a small collection of three tiff files. figure 10. objects ingested into islandora. archivematica workflow on the archivematica side, the deposit initiated in islandora is first sent to the storage service. initially the islandora mets files are saved, and archivematica fetches the corresponding objects and mods files. figure 11. downloaded fedora deposit, showing submissiondocumentation folder. the objects are saved in separate subdirectories. this covers situations where there may be duplicate filenames in the same transfer – especially the “obj” naming mentioned earlier. figure 12. downloaded fedora deposit, showing top level. figure 13. downloaded fedora deposit, showing one object subfolder. once the deposit is finalized (following one or more cron calls in islandora), a transfer is initiated on the archivematica dashboard. there is an automation tool available to automatically remove successfully completed transfers and ingests from the dashboard.  the transfer name is automatically generated from the mods title (using the first record, if there are multiple objects in the deposit); where needed it will be sanitized to deal with spaces, diacritics, etc. figure 14. archivematica dashboard, showing transfers in progress. completed aips can be browsed and searched on the archival storage tab. in addition to the usual search functionality, you can search for an islandora pid (e.g. islandora:1234) via the identifiers field. the full mods is not indexed, since it’s assumed users will do any detailed searching in islandora. figure 15. archivematica dashboard, archival storage tab the aip structure mirrors that of the deposit. figure 16. downloaded aip, showing objects folder. islandora troubleshooting and follow-up back in islandora, the manage | archivematica tab provides information about the status of individual objects. you can also use the “send to archivematica” button to initiate a new deposit. this is useful for testing, but would also be required in the case of a failed transfer or if an object in an existing record is replaced (archivematica will only fetch new objects). figure 17. islandora administrator interface, showing manage | archivematica tab log reports are also available under reports | recent log reports. these are primarily useful in the case of a failed deposit. at the collection level (or compound object/book level), the manage | archivematica tab provides an interface for deleting objects that have been ingested by archivematica, if the callback is configured. figure 18. islandora administrator interface, showing manage | archivematica tab at the collection level challenges and lessons learned planning while code regressions and limitations on people’s time (as outlined above) are hard to avoid, a key lesson learned is that the design requirements should have been much clearer from the outset. indeed, the initial requirements were developed by artefactual and discovery garden following a series of e-mails and meetings; the university library did not submit any formal documentation. this lack of concrete direction contributed to the false start we experienced, with a quote for an integration assuming workflow would start in archivematica. further, at the outset of the project, we had only recently adopted islandora; and as project lead i had very little hands-on experience with islandora before we started to do quality assurance, let alone during the development of requirements. for example, we missed some simple things, such as object naming conventions for the default batch import routine (resulting in duplicate filenames), or detailing how different object types (e.g. compound objects) should be handled. since this development work was part of the sho project, it was not actually managed within the library as a separate project, which might have helped mitigate some of these planning shortfalls. sustainability an ongoing challenge relates to ongoing maintenance and sustainability of the code. this initially resulted from a lack of understanding about the different development models for archivematica (maintained by artefactual systems) and islandora. artefactual systems is the “lead developer” of archivematica. as such, any development work done for clients is pursued with open source release, and more general utility, in mind. as artefactual describes on its website: “… although we may develop new features for you, we will not be creating a custom application that will need to be maintained by your organization. instead, we will incorporate the new customizations into later releases of the software and support them independently of your organization so that others can benefit from them” (artefactual systems – services – development). the development relating to the archivematica/islandora integration has been incorporated into the most recent public releases of archivematica, and is stable as of archivematica 1.6.1 and storage service 0.10.0. my experience had been with atom, the other software package maintained by artefactual systems. so i had mistakenly assumed that the development model for islandora, and the approach of discovery garden, would be similar. indeed, we incorporated language in the development contract with artefactual to allow both companies to publish the code under their respective open source licenses. (the university’s contract was with artefactual, which subcontracted with discovery garden for the work on the islandora module.) contrary to archivematica, islandora’s code is owned by the islandora foundation. during the process of arranging for the necessary approvals to transfer the archidora module to the foundation, we discovered one stumbling block: the lack of a volunteer component manager to shepherd its incorporation into the islandora code base [2]. since the development had been contracted out, we were not in a position to identify an in-house component manager. islandora guru mark jordan (simon fraser university) kindly volunteered for that role. however, a more important barrier was that the development of the module had not been done with general release initially in mind. the islandora foundation has accepted the module, but it is currently being hosted at islandora labs, and will require further development and testing to be considered for the core release (archidora module [updated 2015]). until this module is deployed by a broader sector of the islandora community and is ready for incorporation into the general release, it will essentially be a customization that the university of saskatchewan needs to maintain. future development opportunities there are a number of possible improvements to the archivematica/islandora integration. i will discuss just a few here. artefactual systems’ lead archivematica developer mentioned several other possibilities in his open repositories 2015 talk (simpson, 2015). a two-way street while this not a use case currently important for the university of saskatchewan, there has been a lot of interest expressed in integration of archivematica and islandora in the opposite direction. that is, ingest of objects first into archivematica, which would generate the packages required for either automated or manual upload to islandora – similar to the integrations for atom and contentdm, described above. this is of interest especially for institutions that are using islandora as the access system for both digitized and born-digital material. mark jordan’s presentation at islandora camp in 2012 described both use cases, and sketched out preliminary development strategies (jordan, 2012). a few institutions have reported on local customizations and experimentation. for example, michigan state university (msu) libraries transformed the mets file from archivematica into a version for ingest into fedora (collie and mak, 2013). a poster presentation also by msu (collie, higgins, mak and nicholson, 2014) further makes the case for islandora/archivematica integration, by highlighting elements of the ndsa levels of preservation (national digital stewardship alliance, 2013) that each system addresses. more recently, a couple threads in the islandora google group have captured interest on working on the archivematica to islandora integration, and reported on on possible development approaches. as outlined by mark jordan, “islandora is ready for this, via the islandora rest module. the work required to have archivematica produce dips for public access in islandora needs to be done on the archivematica side” [3]. the zuse institute berlin may have taken the archivematica to islandora integration the furthest, reporting at ipres 2015 on an implementation involving archivematica, fedora/islandora, and irods (klindt and amrhein, 2015). this code does not appear to be publicly available at this time. there is also potential for integration between archivematica and fedora, rather than islandora per se. indeed, the current integration is primarily between the archivematica storage service and the fedora repository, even though this is achieved through an islandora module. storage of aips in a fedora repository is one area of interest; this has been achieved, for example, at the universities of york and hull as part of an ongoing research data project (mitcham et al, 2016). integration of islandora metadata the mods files are saved in the aip as part of submissiondocumentation; and at least for images, mods and dc metadata become part of the archivematica mets file via exif tool output. but this descriptive metadata is not fully searchable, and the dmdsec section of the archivematica mets file is not populated, as it would be for imported metadata (archivematica documentation: import metadata). this kind of integration was not a priority for our initial development; we assume that most searching will take place in islandora, with the islandora pid sufficient to pull the master object from archivematica. however, adding more integrated metadata would introduce possibilities for richer integration with other systems, for example for dissemination information packages (dips) generated for atom or other access systems. there is also potential to take greater advantage of islandora’s available digital preservation functionality. the islandora premis module provides the capability to generate xml and html representations of premis data in islandora, currently including fixity checks, agent information, and rights metadata from the descriptive record [4]. this module was not on our radar during the initial development of archidora, and we have not currently implemented it. clearly, however, there would be advantages to including islandora’s premis data in the packages generated by archivematica. at least part of the premis output from islandora – fixity information – is currently included in the fedora mets file. development would likely be needed to configure how this data is included in the archivematica mets file, or to pull in the full premis xml file from islandora. re-ingesting objects/aips currently, the archivematica process is only triggered for new – not updated – objects in islandora. arguably a new aip should be created if digital objects are replaced; decisions about what extent of changes to metadata warrant a new aip are more challenging [5]. a manual process is available, through the “add to archivematica” button, but this is obviously subject to user error. another potential downside to this manual process is that this creates an aip with just that object, rather than the larger aips generated as part of normal workflow; and this option is not available at the book or compound object level. for larger sets of objects needing re-ingest, the drush script would be another option, but this also currently needs to be run manually. conclusion the archivematica/islandora integration adds to a growing set of integrations between archivematica and other digital preservation, access and repository software packages, including atom, contentdm, dspace, archivesspace (eckard, pillen and shallcross, 2017), and lockss. responding to a suggestion that archivematica and islandora might be competing for the same users, then artefactual president peter van garderen tweeted, “we don’t compete, we integrate” (van garderen, 2012). an artefactual analyst elabourated on this philosophy in her talk at open repositories 2015, focusing on endpoints and handoffs from source systems (mumma, 2015). while islandora has some digital preservation functionality, our preference is to use a system with digital preservation as a specialization, and take advantage of islandora’s specialization as an access and digital asset management system. since islandora is actively used by multiple users, archivematica also provides a better option for reliable preservation of the master objects. ultimately, as described in the background section, other systems and sources will feed into archivematica, so that we are not managing preservation in multiple systems. we are always glad to hear about interest in adopting and developing archidora [6]. over time, we are hopeful that wider adoption will result in archidora (in both archivematica and islandora) achieving a status as community owned and maintained software, integrating archivematica and islandora with workflows in both directions. references archidora module, islandora labs [internet]. [updated (last commit) 2015 march 2]. github [cited 2017 october 23]. available from: https://github.com/islandora-labs/archidora archivematica documentation: import metadata [internet]. artefactual systems: archivematica documentation, version 1.6 [cited 2017 october 19]. available from: https://www.archivematica.org/en/docs/archivematica-1.6/user-manual/transfer/import-metadata/ artefactual systems – services – development [internet]. artefactual systems website [cited 2017 october 23]. available from: https://www.artefactual.com/services/development/ collie a, higgins d, mak l, nicholson s. 2014. furthering the community: integrating archivematica and islandora [internet]. library information and technology association (poster presentation), january 2014. [cited 2017 october 18]. available from: https://figshare.com/articles/furthering_the_community_integrating_archivematica_and_islandora/899883 collie a, mak l. 2013. incompatible or interoperable? a mets bridge for a small gap between two digital preservation software packages [internet]. alcts metadata interest group, ala midwinter meeting; seattle, washington: 2013 january 27. [cited 2017 october 18]. available from: http://connect.ala.org/node/199172 eckard m, pillen d, shallcross m. 2017. bridging technologies to efficiently arrange and describe digital archives: the bentley historical library’s archivesspace-archivematica-dspace workflow integration project. code4lib journal [internet]; issue 35 (2017 january 30). [cited 2017 october 25]. available from: http://journal.code4lib.org/articles/12105 jordan m. 2012. integrating islandora and archivematica [internet]. charlottetown, canada: islandora camp, 2012 august 2. [cited 2017 october 18]. available from: http://summit.sfu.ca/item/10873 klindt m, amrhein k. 2015. one core preservation system for all your data – no exceptions! proceedings of the 12th international conference on digital preservation, chapel hill, north carolina, 2015 november 2-6 [internet]. [cited 2017 october 25]. available from: https://phaidra.univie.ac.at/detail_object/o:429551 mitcham j, awre c, allinson j, green r, wilson s. 2016. filling the digital preservation gap: a jisc research data spring project; phase three report [internet], 2016 october. [cited 2017 october 25]. available from: https://dx.doi.org/10.6084/m9.figshare.4040787 mumma c. 2015. archivematica: handshaking towards comprehensive digital preservation workflows. or2015: 10th international conference on open repositories, indianapolis, indiana, 2015 june 9 [internet]; [cited 2017 october 25]. available from: http://program.or2015.net/mumma-archivematica_integration-174_a.pdf national digital stewardship alliance, ndsa levels of preservation, version 1 (2013?) [internet]. [cited 2017 october 18]. available from: http://www.digitalpreservation.gov:8081/ndsa/activities/levels.html simpson j. 2015. archidora: leveraging archivematica preservation services with an islandora front-end [internet]. or2015: 10th international conference on open repositories, indianapolis, indiana, 2015 june 9. [cited 2017 october 23]. available from: http://program.or2015.net/simpson-archidora-229.pdf sword api [internet]. [updated 2017 march 23]. artefactual systems: archivematica wiki [cited 2017 october 25]. available from: https://wiki.archivematica.org/sword_api van garderen p. 2012 april 25 [internet]. twitter [cited 2017 october 25]. available from: https://twitter.com/pjvangarderen/status/195206083806113792 notes [1] from improvements/islandora [internet]. [updated 2016 march 17]. artefactual systems: archivematica wiki [cited 2017 october 20]. available from: https://wiki.archivematica.org/improvements/islandora. further technical documentation is also available on this page. a key difference between the schematic and the functionality as it now exists is that the post-store call back prompts archivematica to list the object(s) in the aip as ready to be deleted, but this is not done automatically; rather, the objects can be selected for individual or bulk deletion in the manage tab of the relevant collection/book/compound object. [2] the islandora foundation licensed software acceptance procedure [cited 2017 october 23; available from: http://islandora.ca/developers/lsap) appears to have been fleshed out since our contribution of archidora. an archived version of the page dated march 2015 (https://web.archive.org/web/20150316194238/http://islandora.ca/developers/lsap) does not include a reference to the component manager requirement. that element had been added by september 2015, with a more thorough revision as recently as march 2017. [3] islandora and archivematica [internet]. islandora users group, 2017 august 16 [cited 2017 october 23]. available from: https://groups.google.com/d/msg/islandora/5qxsz3vwbvw/ognos7lkagaj. see also aip, dip, sip generation [internet], islandora users group, 2017 august 30 [cited 2017 october 23]. available from: https://groups.google.com/d/topic/islandora/w7uee1wb0v4/discussion [4] islandora premis [internet]. github [cited 2017 october 19]. available from: https://github.com/islandora/islandora_premis. for more details and discussion of future directions, see jordan m., mclellan e., premis in open-source software: islandora and archivematica. in: dappert a., guenther r., peyrard s. (eds) digital preservation metadata for practitioners [internet]. springer, cham, 2016 [cited: 2017 october 18]. available from: https://doi.org/10.1007/978-3-319-43763-7_16 [5] a presentation at access 2017 outlined some of these issues, notably the fact that objects can be saved multiple times as part of a single ingest. see weiwei shi, shane murnaghan, and matt barnett, the way leads to pushmi-pullyu, a lightweight approach to managing content flow for repository preservation at uofa libraries [internet], saskatoon, canada: access 2017, 2017 september 28, [cited 2017 october 19]. available from: https://drive.google.com/file/d/0b8b5fxybn_3_tws0um1nmln1vu1iuzrvcuduqtqxeupyvhbr/view [6] beyond some informal inquiries, we are aware of archidora’s use in testing workflows for research data. see research data canada, rdc federated pilot for data ingest and preservation, 2015 january 9 [internet]. [cited 2017 october 25]. available from: https://www.rdc-drc.ca/the-rdc-federated-pilot-for-data-ingest-and-preservation/ about the author tim hutchinson has been an archivist at the university of saskatchewan since 1997. he was appointed as university archivist in 2004, and as head of university archives & special collections in 2013 (he is currently on sabbatical); and has been active in a range of activities and developments in the areas of digital archives and preservation, digitization, archival descriptive standards, and technology for archives more generally. subscribe to comments: for this article | for all articles leave a reply name (required) mail (will not be published) (required) website δ issn 1940-5758 current issue issue 60, 2025-04-14 previous issues issue 59, 2024-10-07 issue 58, 2023-12-04 issue 57, 2023-08-29 issue 56, 2023-04-21 older issues for authors call for submissions article guidelines log in this work is licensed under a creative commons attribution 3.0 united states license. the code4lib journal – a practical method for searching scholarly papers in the general index without a high-performance computer mission editorial committee process and structure code4lib issue 58, 2023-12-04 a practical method for searching scholarly papers in the general index without a high-performance computer the general index is a free database that offers unprecedented access to keywords and ngrams derived from the full text of over 107 million scholarly articles. its simplest use is looking up articles that contain a term of interest, but the data set is large enough for text mining and corpus linguistics. despite being positioned as a public utility, there is no user interface; one must download, query, and extract results from raw data tables. not only is computing skill a barrier to use, but the file sizes are too large for most desktop computers to handle. this article will show a practical way to use the gi for researchers with moderate skills and resources. it will walk though building a bibliography of articles and a visualizing yearly prevalence of a topic in the general index, using simple r programming commands and a modestly equipped desktop computer (code is available at https://osf.io/s39n7/). it will briefly discuss what else can be done (and how) with more powerful computational resources. by emily cukier introduction the general index (gi) is a massive corpus of text data derived from published articles; its stated purpose is to open scholarly literature to public inquiry. the gi contains tables of keywords [1], ngrams, and associated metadata extracted from a corpus of over 107 million journal articles drawn from general and specialized journals [2]. this enables full-text searching of a wide swath of academic literature in a single shot, without limitation by vendor platform or paywalls. the gi is the output of a mass journal article accumulation project spearheaded by open information advocate carl malamud and conducted at jawaharlal nehru university (jnu) in new delhi [3]. public resource, a nonprofit founded by malamud, released the first public version of the general index in october 2021 [4]. as of this article’s publication, it contained articles published as recently as 2020. the gi could be a powerful aid to librarians and digital humanists for tracking concepts through scholarly literature. one clear application is in literature review and systematic searching: one can query search terms simultaneously across more articles and disciplines than contained in even the largest vendor discovery platforms, and without permission to access full text [5]. with minimal manipulation one can link term instances to publication years, enabling diachronic analysis of word usage over time. this allows for visualization of trends in journal articles, much like google ngram viewer does for books. but unlike google, the gi links keyword and ngram data to the document of origin, which enables identification and retrieval of the works. a substantial obstacle to using the gi is lack of an exploratory interface. the user must download the raw data tables, then devise methods for querying the records. even though the tables are split into slices, reading them requires more disk space and memory than found in typical desktop computers. with some deliberate programming choices and tricks, it is still possible to use portions of the gi in a limited computing environment. this paper will present one workflow for querying gi keywords in a desktop computing environment using the r programming language. it will show how to create a bibliography of literature on a topic of interest and plot its yearly prevalence in gi articles. it will also discuss adapting the method to a high-performance computing environment, which enables analysis of gi ngrams. contents the general index comprises three data tables of keywords, ngrams, and metadata parceled into sixteen slices apiece and formatted as .sql files. slices are compressed to facilitate downloads. the compressed files take up a total of 4.7 terabytes of space and expand to a total of 37.9 terabytes. table 1. general index compressed and expanded file sizes compressed slices compressed total unzipped slices unzipped total metadata – single file enhanced (version 10.21) n/a 24.2 gb 4.2-4.4 gb 70 gb keywords (version 10.18) 21-23 gb 355 gb 95-102 gb 1.6 tb ngrams (version 10.18) 262-288 gb 4.5 tb 2.1-2.3 tb 36 tb records are allocated to slices according to the first digit of a field labeled “dkey”. the dkey is a unique identifier for each article consisting of 40 hexadecimal digits determined by applying a hash algorithm to the file that contains it. this common field enables linking keyword and ngram records to their corresponding metadata (table 2). file names are standardized to include the data type (“keywords”, “ngrams”, “info” or  “meta”) and dkey first digit – e.g., the 11th slice of ngram data is named “doc_ngrams_b.sql”. ngrams (1-5 grams) were determined using spacy, a cython-based natural language processing tool. keywords were determined using the python package yake (yet another keyword extractor) [6]. yake ranks the importance of words within a document according to text features and statistics like word frequency, position in the document, relation to context, and capitalization. the keyword and ngram tables each contain fields for the keyword or ngram found, its lower-case equivalent, and number of tokens (words) it contains. each also has a field that describes the term’s representation within the article: the yake score for keywords (smaller values correspond to greater importance), and term frequency (number of occurrences in the document) for ngrams. the metadata table contains metadata derived from both outside the file (document metadata) and extracted from full text. of particular interest for citation tracking and analysis are fields for doi, isbn, journal title, article title, publication date, and authors. a partial list of fields and their descriptions can be found in the gi readme file. table 2. selected general index metadata fields keywords ngrams metadata dkey dkey dkey keywords ngram doi keywords_lc ngram_lc isbn keyword_tokens ngram_tokens journal keyword_score ngram_count title term_freq pub_date author the corpus is heavily weighted towards recent publications, with the bulk of the articles with determinable publication years (39%) (45844188 of total) published in 2017-2019. five percent of articles did not have readily extractable publication years. 1544 (0.001%) had publication years falling outside of the feasible values of 1600-2020. figure 1. number of articles per year. figure 2. number of articles per year, logarithmic scale. the log scale makes several features of the data visually apparent: the absolute numbers during lower-volume publication years, the onset and duration of an exponential growth phase, and the publication burst in the most recent few years. the earliest publications in the gi (with realistic publication years) were produced in the 1660s. thence forward, the gi contains on the order of 100 articles per year until 1880, when the article volume shows steady exponential growth through 2016. article volume jumps by orders of magnitude in 2017. low article volume in 2020 suggests that article accumulation ended in this year. local workflow: literature indexing the following diagram demonstrates the steps for compiling bibliographic information and determining yearly prevalence of a term in the gi. figure 3. gi workflow diagram. functions and packages are shown in italics. i performed these steps on a hp computer running windows 10 with a 3.4 ghz intel i3 cpu, 8 gb ram, 256 gb internal hard drive, and an external 1 tb hard drive. scripts were written in r and run in rstudio. part i: file preparation download & unzip general index files are available for download at https://archive.org/details/generalindex. downloading each keyword file and the single enhanced metadata file took roughly 6 hours apiece at a download speed of approximately 1 mb/sec. the zipped gi files require decompression before manipulation. to unzip the combined metadata file, i used the free utility 7-zip (available at https://www.7-zip.org) twice: once to unpack the file from .gz to .tar, and again to yield a set of 16 .sql files. to prepare the keyword files, i created an rstudio script that would individually decompress each file, search for terms of interest, retain the matches, and remove the expanded file before decompressing the next. this limited the amount of disk space needed to store keyword files to 457 gb at any given time (355 gb for all zipped slices + 102 gb for the largest uncompressed file). if disk space is truly at a premium, it would be possible to download a single keyword file at a time, unzip it, extract records of interest, and delete the file before moving on to the next. part ii: compiling a bibliography term search drosera is a genus of carnivorous plants (commonly known as sundews) found on six continents [7]. to demonstrate literature indexing, i chose to search the gi keyword files for mentions of sundew or drosera. the smallest decompressed keyword file was about 95 gb, which was too large to read into rstudio. however, the r function fread() (part of the data.table package) can presearch a structured file and read in only the lines that match a particular pattern. this is done using the element “cmd” to execute an operating system command on the file before importing it into the rstudio environment. in this case, i used the pattern-searching command grep [8] to select lines that contained either ‘drosera’ or ‘sundew’. r could readily handle this data subset. to reduce exclusion of valid hits, i used a case-insensitive search and placed no restrictions on characters before or after each search string. # -------creating a bibliography for search terms-----------# ## ---------unzip each file and read in keyword hits -------## keyword_path = "d:/gi_files/keywords" keyword_files = dir(keyword_path, pattern="*.sql.zip", full.names = true) keyword_headers = c("dkey", "keywords", "keywords_lc", "keyword_tokens", "keyword_score", "doc_count", "insert_date") keyword_tbl % filter(!keywords %in% "sundewall") %>% distinct(dkey) the algorithm took roughly 50 minutes to process each slice (30 for unzipping and 20 for term matching), less than 14 hours total. it retrieved 9675 matching keyword records across the slices, which required less than 1 mb of disk storage to save as a .tsv file. at this stage it is prudent to manually inspect a sample of records to ensure the query behaves as intended. after looking at the results in openrefine [9], i added lines of code to filter the surname “sundewall”, a spurious hit caught by my original query. i also included a line to remove duplicate instances in the dkey field. duplicate article matches can occur even when searching for a single word, as gi keyword records may include the same term on its own and as part of one or more phrases. after these filtering steps, 4,565 unique articles remained. match metadata the next steps to turn this occurrence list into a useful index are to load in the gi metadata corresponding to the identified articles, using the common “dkey” field. i was unable to load the >4gb metadata slice files into rstudio due to memory limitations. instead, i made similar use of fread() and grep as with the keyword files, here reading in only the metadata records with dkey identifiers that matched the keyword hits. since the search for each individual dkey occurred serially, this took considerable time – about 36 hours for the 4,565 unique sundew dkeys. metadata were found for 4336 (95.0%) of them. ## ------read in matching article metadata ---------------## metadata_path = "d:/gi_files/metadata/doc_info.2022.12.update/doc_meta/doc_meta/" meta_headers = c("dkey", "raw_id", "meta_key", "doc_doi", "meta_doi", "doi", "doi_flag", "doi_status_detail", "doi_status", "isbn", "journal", "doc_title", "meta_title", "title", "doc_pub_date", "meta_pub_date", "pub_date", "doc_author", "meta_author", "author", "doc_size", "insert_date", "multirow_flag") term_metadata