Related post: MarcEdit and the Windows XP Sunsetting conversation
So, this has been kind of interesting. Since Sunday, I’ve been running a script against my access logs to get a better idea of what the MarcEdit XP user community may look like. I timed this with the update, because I’ve found that in general, a large number of users will update the program within the first couple of weeks of the update. Equality interesting, even though MarcEdit has an automatic updating tool, there are users that stay with very old versions of the 6.x series.
Anyway, couple of interesting things of note since this active log analysis began:
- Since Sunday, MarcEdit’s automatic update script has been pinged north of 250,000+ times. That means that since Sunday, users that make use of the autoupdate notifications have opened the program to do work at least a quarter of a million times.
- Since Sunday, MarcEdit has been updated ~7000 times. I’ve estimated that the active user community is around 11-12k users, but that year over year, the update service will report a unique user count in the high 20,000s. Assuming that these are the most active users, I think this gives an idea of who will be most immediately impacted by any potential change in XP support.
- Of those approximate 7000 users, 9 run XP. The largest number of these users come from China and India, but surprisingly, there are still US users (at academic institutions based on the IPs reported) that still run XP…my god.
- Surprisingly, the mostly widely used Windows Operating system reported was Windows 8.1. I honestly expected to see Windows 7. But by usage, the breakdown was Windows 8.x, Windows 10, then Windows 7. I really thought the order was going to be Windows 7, 10, then 8.x.
So what can I learn from this way to early analysis of the update/usage information. First, it confirms a suspicion that I’ve had for a while that XP is very much in the minority among MarcEdit’s most active users…and that’s actually about it. What I anticipate seeing is that the initial trends (can 7 users be a trend) that shows XP usage largely concentrated in China and India (since these are both large user communities). I’m honestly also curious if this will extend to the Middle East. Year over year, the Middle East represents the 3rd highest concentration of MarcEdit users. The question for me as this picture becomes more clear is how wide spread XP use actually is — and that I just don’t know yet. Oh, and third…I keep thinking there is a paper to be written here…if I could just find the time. 🙂
This question has shown up in my email box a number of times over the past couple of days. My guess, it’s related to the youtube videos recently posted demonstrating how to setup and use MarcEdit directly with Alma.
- Windows Version: https://youtu.be/8aSUnNC48Hw
- Mac Version: https://youtu.be/6SNYjR_WHKU
Folks have been curious how this work was done, and if it would be possible to do this kind of integration on their local ILS system. As I was answering these questions, it dawned on me, others may be interested in this information as well — especially if they are planning to speak to their ILS vendor. So, here are some common questions currently being asked, and my answers.
How are you integrating MarcEdit with the ILS?
About 3 years ago, the folks at Koha approached me. A number of their users make use of MarcEdit, and had wondered if it would be possible to have MarcEdit work directly with their ILS system. I love the folks over in that community — they are consistently putting out great work, and had just recently developed a REST-based API that provided read/write operations into the database. Working with a few folks (who happen to be at ByWaters, another great group of people), I was provided with documentation, a testing system, and a few folks willing to give it a go — so I started working to see how difficult it would be. And the whole time I was doing this, I kept thinking – it would be really nice if I could do this kind of thing with our Innovative Interfaces (III) catalog. While III didn’t offer an API at the time (and for the record, as of 4/17/2017, they still don’t offer a viable API for their product outside of some toy API for dealing primarily with patron and circulation information), I started to think beyond Koha and realized that I had an opportunity to not just create a Koha specific plugin but use this integration as a model to develop an integration framework in MarcEdit. And that’s what I did. MarcEdit’s integration framework can potentially handle the following operations (assuming the system’s API provides them):
- Bibliographic and Holdings Records Search and Retrieval — search can be via API call, SRU or Z39.50
- Bibliographic and Holdings Records creation and update
- Item record management
I’ve added tooling directly into MarcEdit that supports the above functionality, allowing me to plug and play an ILS based on the API that they provide. The benefit is that this code is available in all versions of MarcEdit, so once the integration is created, it works in the Windows version, the Linux version, and the Mac version without any additional work. If a community was interested in building a more robust integration client, then I/they could look at developing a plugin — but this would be outside of the integration framework, and takes a significant amount of work to make cross-platform compatible (given the significant differences in UI development between Windows, the MacOS, and Linux).
This sounds great, what do you need to integrate my ILS with MarcEdit?
This has been one of the most common questions I’ve received this weekend. Folks have watched or read about the Alma integration, and wondered if I can do it with their ILS. My general answer, and I mean this, is that I’m willing to integrate any ILS system with MarcEdit, so long as they can provide the available API end points that make it possible to:
- Search for bibliographic data (holdings data is a plus)
- Allow for the creation and update of bibliographic data
- Utilize an application friendly authentication process, that hopefully allows the tool to determine user permissions
This is a pretty low bar. Basically, an API just needs to be present; and if there is one, then integrating the ILS with MarcEdit is pretty straightforward.
OK, so my ILS system has an API, what else do I need to do?
This is where it gets a bit trickier. ILS systems tend to not work well with folks that are not their customers, or who are not other corporations. I’m generally neither, and for the purposes of this type of development, I’ll always be neither. This means that getting this work to happen generally requires a local organization within a particular ILS community to champion the development, and by that, I mean either provide the introductions to the necessary people at the ILS, or provide access to a local sandbox so that development can occur. This is how the Alma integration was first initiated. There were some interested folks at the University of Maryland that spent a lot of time working with me and with ExLibris to make it possible for me to do this integration work. Of course, after getting started and this work gained some interest, ExLibris reached out directly, which ultimately made this a much easier process. In fact, I’m rarely impressed by our ILS community, but I’ve been impressed by the individuals at ExLibris for this specifically. While it took a little while to get the process started, they do have open documentation, and once we got started, have been very approachable in answering questions. I’ve never used their systems, and I’ve had other dealings with the company that have been less positive, but in this, ExLibris’s open approach to documentation is something I wish other ILS vendors would emulate.
I’ve checked, we have an API and our library would be happy to work with you…but we’ll need you to sign an NDA because the ILS API isn’t open
Ah, I neglected above to mention one of my deal-breakers and why I have not at present, worked with the APIs that I know are available in systems like Sirsi. I won’t sign an NDA. In fact, in most cases, I’ll likely publish the integration code for those that are interested. But more importantly, and this I can’t stress enough, I will not build an integration into MarcEdit to an ILS system where the API is something that must be purchased as an add-on service, or requires an organization to purchase a license to “unlock” the API access. API access is a core part of any system, and the ability to interact, update, and develop new workflows should be available to every user. I have no problem that ILS vendors work with closed sourced systems (MarcEdit is closed source, even though I release large portions of the components into the public domain, to simplify supporting the tool), but if you are going to develop a closed source tool, you have a responsibility to open up your APIs and provide meaningful gateways into the application to enable innovation. And let’s face it, ILS systems have sucked at this, and much to the library community’s detriment. This really needs to change, and while the ability to integrate with a tiny, insignificant tool like MarcEdit isn’t going to make an ILS system more open, I personally get to make that same choice, and I have made the choice that I will only put development time into integration efforts on ILS systems that understand that their community needs choices and actively embraces the ability for their communities to innovate. What this means, in practical terms, is if your ILS system requires you or I to sign an NDA to work with the API, I’m out. If your ILS system requires you or their customers to pay for access to the API through additional license, training, or as an add-on to the system (and this one particularly annoys me), I’m out. As an individual, you are welcome to develop the integrations yourself as a MarcEdit plugin, and I’m happy to answer questions and help individuals through that process, but I will not do the integration work in MarcEdit itself.
I’ve checked, my ILS system API meets the above requirements, how do we proceed?
Get in touch with me at firstname.lastname@example.org. The actual integration work is pretty insignificant (I’m just plugging things into the integration framework), usually, the most time consuming part is getting access to a test system and documenting the process.
Hopefully, that answers some questions.
I’d posted some not so random thoughts on the Ohio State Libraries local IT blog. If interested, you can find it here:
In a nutshell, I’ve been struck this time around the very old-world view of the library the survey seems to be presenting to faculty. Certainly, the survey has value, but I wonder how much value when so much of what libraries do today is beyond simply providing access to journals (in fact, I’d argue most of the interesting stuff we do for faculty has nothing to do with providing access to traditional materials). Anyway, if you think I’m off base, let me know.
I’ve often thought that I have one of the best jobs in the world. I work in a library – but more specifically, I hold an endowed chair at Oregon State University Valley Libraries: The Gray Family Chair for Innovative Library Services. The original vision for this position came from John and Betty Gray, OSU alums and committed citizens of Oregon, to create a position that would help move libraries forward. The Grays saw the changing landscape, the encroachment of technology into a largely analog profession, and wanted to provide a position at the OSU Valley Libraries that would act as that bridge between the past, present, and future of the library profession.
Being the Gray Family Chair has given me more than my fair share of opportunities. Through the endowment, it has allowed me to travel and take part of conversations shaping libraries at an international level. It has provided me with support to pursue my own research interests, specifically as they relate to issues around digital preservation and discovery. I have grown as a member of the OSU Libraries administration team and have taken advantage of opportunities like the Frye’s Leadership Institute. It is a position that has and continues to lower barriers and open doors that might have otherwise stayed closed to me. These are the things that the Gray Family Chair has done for me.
But I have to ask myself if I have I been a good ambassador for the Gray Family? I’ve been thinking about that a lot over the past couple of weeks. As the Gray Family Chair, I represent both Oregon State University Libraries and to some degree, the hope and faith placed in this position by John and Betty Gray and I’d like to think that I have.
We all have passions in life, and one of mine has been working for the residents of Oregon – specifically around equitable access to information. Within my role as the Gray Family Chair, I’ve dedicated a good deal of my time to working for the underserved and unserved people of Oregon. In 2009, while attending a meeting at the Oregon State Library, the then State Librarian talked about the growing population of underserved residents in the state. Nearly 20% of Oregon fell outside of library districts and were unable to access resources purchased for them on their behalf by the State Library. Since access to these materials have traditionally been managed through the state’s public library system, residents living outside of the system were essentially frozen out. People were falling through the cracks and the State Library was looking for partners with ideas to help close those gaps. OSU Libraries stepped up and helped create the Libraries of Oregon (http://librariesoforegon.org) that targets underserved residents of the state. These resources were developed to help residents connect with libraries, advocate on their behalf, and make access to state-licensed materials transparent to the user. And largely, I think we are succeeding. We are seeing steady traffic, and getting direct feedback letting us know we are on the right track. Public libraries tell us that this resource helps them connect with people outside of their districts. We still have a long ways to go, but I’d like to think that in a small way, we are helping to bridge the information gap for Oregonians.
On Oct 27th, my work with the Libraries of Oregon was recognized by the OR-ACRL as the recipient for the 2012 Oregon Award for Excellence. It comes on the heels of the passing of Mr. John Gray on Oct. 19th, 2012. While I never had an opportunity to meet John Gray, I had been told in March 2011 when we launched the Libraries of Oregon that Mr. Gray was extremely excited about the new service and the commitment OSU Libraries was making to all of Oregon. Personally, it was high praise from a man who spent his life dedicated to helping people.
At some point, I’ll have to step away from the Gray Family Chair. Technology changes, issues shift and it will be time for new blood to occupy this position and move it in a fresh direction. The Gray’s knew that…and asked that the endowed chair reflect that reality by tying the endowment to issues not people. And at the same time, the endowment is very much about people and the ways in which education and access to education can open doors to everyone. There’s a time coming sooner than I might like where I will need to pass the baton and move back into the real world. When I do, I hope that my time in the chair will have represented the best of what the Gray’s had envisioned so many years ago.
Last week, I was on a panel at the Oregon Library Association entitled, A Sense of Service. The title of the panel and the impetus for the discussion came out of the Oregon Library Association’s Quarterly publication, or more specifically, Janet Webster’s article entitled, “A Sense of Service(1).” The article, and the publication in general, focused on what it means as a librarian to serve. As one might expect, most of the articles in the publication focused on how librarians ultimately work to serve their patrons – which I guess makes sense – it is our most visible role to the public, and one that takes on more importance as libraries struggle to demonstrate their value to their communities. But it’s also a viewpoint that excludes the majority of people that work in libraries. If we define service with such a narrow lens, what does that mean for technical services staff, support staff, administration…all of which perform functions that help to meet their patron’s needs.
I ask this question because this was the question posed to me. I had been asked to participate on this panel and as the sole librarian on the panel without direct contact with library’s patrons, how and who exactly do I serve and how do you identify if your service has impact aren’t necessarily straightforward questions? But it’s an interesting question, and one that I actually spent a good deal of time thinking about prior to speaking on the panel.
I guess like many people that work in non-public service positions, I tend to think very little about service – at least in the sense of making people happy. And so in that respect, I was having a difficult time wondering what I might be able to add to the conversation. The very talented librarians on my panel would be talking about how they are changing lives by embodying an ethic of service to ensure that their patrons (students, community members, etc.) have access to the information that they need. These librarians can discuss how their service tangibly impacts their communities – from students who grow into life-long readers, or community members discovering new digital services, or students successfully traversing their library’s vast information resources, these librarians could see that they made a difference every day. I may have been a panelist, but I was looking forward to hearing my colleagues share their excitement, because often times, the why we serve is very closely aligned to the why we work in libraries.
But as I said, I don’t work with patrons. As the Gray Family Chair for Innovative Library Services, my job at OSU Libraries is to build bridges, understand how new technology will impact the library, develop experimental services, and help the library strategically align itself to meet future needs. Sure, patrons are helped by the work that I do – but it’s service that’s one or two steps removed from those that use the library. Which got me wondering again, what exactly do I have to offer to a panel on service or to those librarians that don’t work directly with the public?
So what kinds of service could I point to? My first thought was to look at my dossier. I’ve been spending a lot of time looking at my dossier lately – mostly because I’m trying to decide when it will be strong enough to take a shot at full professor. Given that this isn’t judged by the library, but a group largely made up of research scientists at the University, the process can be a difficult one. Anyway, one of the sections that make up our dossier and candidate statement is one on service. But honestly, what I find there doesn’t inspire me. Service in this case is service to the profession, to the university – i.e., committees served, leadership positions held. Hardly inspirational material for an up and coming librarian. I had visions of being the lone person on the panel trying to inspire librarians to better service through an adherence to parliamentary procedure. (Actually, if you ever want to depress yourself, look at the committees your university happens to have. I swear to God, the one that still makes me laugh ever time I see it at OSU is the Committee on Committees. I have a feeling that it must be important, but I get such an overwhelming sense of apathy when I see it.)
Certainly there must be more – so I started to think about why I work in a library. Actually, not just a library, but why I work at a land grant institution, and an idea started to take shape – especially around my own sense of what service. And I came to an understanding that for me – there are two distinct ways in which I serve: professionally (which are things I have to do) and selfishly (things I have to do – but want to do). Well, maybe selfishly isn’t the best way to describe it…no, maybe it is.
Sweeping away the professional service for the moment, I want to focus specifically on how I serve selfishly, and the philosophy that I apply. As part of the panel, we were asked to address three questions:
- Whom do you serve?
- How do you serve?
- Why do you serve?
Honestly, I couldn’t cleanly answer those questions. So, I wanted to describe how I serve and place it within the context of libraries.
Service of Gaps
I think that the best way that I can describe my service and how I would encourage non-public services librarians to make a difference in their libraries, the library community and their local communities is to consider adopting a philosophy of a service of gaps. It’s a philosophy of service that places an obligation on those people that see needs, to fill them. And I think I have to explain this a little bit – so I’m going to explain it through three different examples.
- The Libraries of Oregon
- Community Committee work (library board work)
The three above examples represent three different types of service that I participate in because we seen needs and had the capacity to fill the gaps. The first is the Libraries of Oregon. This project was born out of a partnership between the Oregon State Library, the Oregon State University Libraries (confusing) and the LSTA Board in Oregon. For years, the state librarian has been supporting projects targeting the underserved and unserved residents of the state (which hovers around 20%). The Libraries of Oregon is a project that we hope will begin to address some of the issues relating to access to information within the state. And yet, this isn’t a project that OSU Libraries had to do (or was originally asked to do). It doesn’t directly help the OSU community, it diverts some scarce resources to an outside project – and yet, this was a project OSU Libraries sought out and undertook because we should. As the land grant institution, we had an obligation to fill this gap – and my position allows the library to do that. I may never meet any of the residents or kids that we help through this program – but because of this work – they will have more access with fewer barriers than before. And as a father who sees other kids struggling to do homework because they can’t get to a public library or they no longer have adequate school library resources, it’s work I believe very strongly in. So, I serve selfishly.
For librarians and professionals that spend most of their time writing code, I think that there is an easy tendency to focus on the work that you are doing and forget about the larger impact of this work. Sure – we understand that the coding we do makes information _____ (fill in the blank, easier to find, safer, richer, visible, etc.), but I also argue that it provides an important avenue for service as well. Release your code and you contribute to the larger “discussion” of library science. Develop something useful, and you can help to simplify someone’s work and help them provide better service for their patrons as well. Engender a community and your can help users/practitioners share workflows, best practices, and build relationships. I’d love to be able to say that I wrote MarcEdit with such noble thoughts in mind, but it’s the epitome of serving selfishly. As a cataloger – I needed better tools – so I wrote one. At the time, cataloging tools were expensive or worked primarily under DOS. (Of course, there was the fabulous MARC.pm modules for PERL, but I’d rather have someone punch me in the face that have to write PERL [I’m just not that good at it.]) So I wrote MarcEdit to understand MARC and give myself a toolkit for developing other applications needing to access MARC data. Making it available to the larger community was something done as an afterthought because a few folks (thanks Kyle Banerjee) thought the program might be useful to other people. Today, I’m not a cataloger, but I continue to develop MarcEdit because it affords me the opportunity to work with catalogers and work with a lot of people doing a lot of very interesting things. I’m certain I get a lot more out of those connections and relationships than the people that actually use the program – but again, its been a gap that I could fill and I’ve been happy to do it.
The last example is a very personal one to me. While I joked about professional responsibilities and committee work, there are times when they can take on a special meaning. Two years ago, I volunteered to serve on my city’s local library board. Not because I had to or even because they couldn’t have found someone to do it – but because I owed the community and the library a debt and had an opportunity to repay it. In my family, the public library is almost a second home. My wife volunteers there, my kids love to visit there – the librarians are close to family (though not as crazy). So, when an opportunity to serve opened up – I was happy to oblige – and through it, I’ve been able to find small ways to make contributions. My hope is that I’ll be able to repay in small measure, what the library has personally provided for my family during the 9 years in the community.
These were the kinds of things I talked about during the panel presentation – this idea of a service of gaps and a notion that service is a fulfillment of an obligation to step in and fill needs. It’s not that much different than what public librarians do – it’s just behind the curtain where people don’t always see it, and where maybe we don’t always recognize it. I know I was happy to have been a part of the panel because it got me to think about service in a way that I hadn’t before. It got me to broaden my lens and think about some of the reasons I enjoy working in a library. And once I started down that path, answering those three questions in the beginning became a lot easier.
- Whom do you server?
Those in my sphere of influence that have a need (be that my community, profession, etc.)
- How do you serve?
By filling in the gaps, and often times, selfishly
- Why do you serve?
Because its my obligation to fill the gaps that I can
One of the hats I wear is as a member of the Independence Library Board. I love it because I don’t work with public libraries as often as I’d like to in my real job, and honestly, the Independence Public Library is the center of the community. The Library is a center for adults looking for education opportunities, kids looking for resources, and home to a number of talented librarians that are dedicated to encouraging a love of reading to our community. It’s one of the few libraries I’ve ever known to have both a children’s and adult reading programs and takes advantage of that in the summer – by having the adults and kids compete against each other to see who logs the most pages (the kids always win).
Each board meeting is interesting, because as the economy became more difficult for people, more people turned to the library. Every month, the library sees more circulations, more bodies in the building, more kids, more adults – just more. And they do it on a budget that doesn’t accurately reflect the impact that they have on the community.
Anyway, one of the things that the Library has going for it is a very active friends program – and through that group (and some grant funds), the library was able to purchase a number of Laptop computers for circulation within the Library. The Library currently has some, 8-10 terminals that are always being used and the laptops would provide additional seats, and allow people to work anywhere within the library using the wifi.
The Library setup the laptops using the usual software – DeepFreeze, etc. to provide a fairly locked down environment. However, what was missing was a customizable timer on the machines. Essentially, the staff was looking for a way to make it easier for patrons checking out the laptops to avoid fines. The Laptops circulate for a finite period of time within the building. Once that time is over, the clock starts ticking for fines. To avoid confusion, and help make it easier for patrons to know when the clock was running out – I’d offered to work on building a simplified timer/kiosk program.
The impetus for this work comes from Access 2007 I think. I had attended the hackfest before the conference and one of the project ideas was an open source timing program. I had worked on and developed a proof of concept that I passed on. And while I never worked on the code since – I kept a copy myself. When we were talking about things that would be helpful, I was reminded of this work.
Now, unfortunately, I couldn’t use much of the old project at all. The needs were slightly different – but it helped me have a place to start so that I wasn’t just looking at a blank screen. So, with idea in hand, I decided to see how much time it would take to whip together an application that could meet the needs.
I’ll admit, nights like tonight make me happy that I still do more than write code in scripting languages like python and ruby. Taking about 3 hours, I put together a feature complete application that meets our specific needs. I’ll be at the Oregon Library Association meeting this week, and if folks find this kind of work interesting, I’ll make it a bit more generic and post the source for anyone that wants to tinker with it.
So what does it do? It’s pretty simple. Basically, it’s an application that keeps time for the user and provides some built-in kiosk functionality to prevent the application was being disabled.
Here are a few of the screen shots:
When the program is running, you see the clock situated in the task tray
Click on the icon, and see the program menu
Preferences – password protected
Because we have a large Hispanic population, all the strings will need be able to be translated. This was essentially is just the locked message. I’ll ensure the others are customizable as well – maybe with an option to just use Google Translate (even though it far, far from perfect) if a need to just get the gist across is the most important.
Run an action (both functions require a password)
Place your cursor over the icon to get the minutes
Information box letting you know you are running out of time
Sample lockout screen
In order to run any of the functions, you must authenticate yourself. In order to disable the lockout screen, you must authenticate yourself. What’s more, while the program is running, it creates a low-level keyboard hook to capture and pre-process all keystrokes, disabling things like escape keys, the windows key, ctrl+alt+del so that once this screen comes up – a user can not break out of it without shutting off the computer (which would result in needing to log in). Coupled with DeepFreeze and some group policy settings, my guess is that this will suffice.
The source code itself is a few thousand lines of code, with maybe a 1000 or 1500 lines of actual business logic and the remainder around the UI/threading components. Short and simple.
Hopefully, I’ll get a chance to do a little testing and get some feedback later this week – but for now – I’m just happy that maybe I can give a little bit back to the community library that gives so much to my family. And if I hear from anyone that this might be of interest outside my library – I’ll certainly post the code up to github.