<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.hoenzb
{mso-style-name:hoenzb;}
span.EmailStyle18
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:#1F497D;}
span.EmailStyle19
{mso-style-type:personal;
font-family:"Calibri",sans-serif;
color:#1F497D;}
span.EmailStyle20
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">We had a need to do something similar as part of our migration (the migration was last year, which I only mention because my memory is a bit foggy about this
now). We used the second approach that Noah described: creating match points by concatenating the resourceIdentifier + refId from the AT. With this approach, we didn’t have any false matches, because the resource identifiers have to be unique in the AT,
and the reference IDs have to be unique per resource, so I’d say that’s the way to go.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Here’s the function that we used for this in SQL, which someone in our IT department wrote for us in a few minutes after hearing about our need to do something
recursive-like in our AT database (Thanks, Steelsen!):<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">DELIMITER $$<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">DROP FUNCTION IF EXISTS `your_at_database_name_here`.`getResourceFromComponent` $$<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">CREATE FUNCTION `your_at_database_name_here`.`getResourceFromComponent` (GivenID INT) RETURNS VARCHAR(1024)<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">DETERMINISTIC<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">BEGIN<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> DECLARE rv INT;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> DECLARE tp INT;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> DECLARE ch INT;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">SET tp = GivenID; /*There is no component 0 so this will be returned if first hit is top level*/<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> SET ch = GivenID;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> WHILE ch > 0 DO<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> SELECT IFNULL(parentResourceComponentId,-1) INTO ch FROM<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> (SELECT parentResourceComponentId FROM resourcescomponents WHERE resourceComponentId = ch) A;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> IF ch > 0 THEN<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> SET tp = ch; /*Keep replacing with the next value up the tree until you hit -1 which means the parent was null*/<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> END IF;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> END WHILE;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">select resourceId into rv from resourcescomponents where resourceComponentId = tp;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"> RETURN rv;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">END $$<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">DELIMITER ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">With that, you can then do something like this:
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-indent:.5in"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">select getResourceFromComponent(4444);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">…which will give you the AT resourceIdentifier for the resource component that has an id = 4444.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><br>
Hopefully that (or a similar approach) will help,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Mark<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"> archivesspace_users_group-bounces@lyralists.lyrasis.org [mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org]
<b>On Behalf Of </b>Noah Huffman<br>
<b>Sent:</b> Thursday, February 04, 2016 11:12 AM<br>
<b>To:</b> Archivesspace Users Group<br>
<b>Subject:</b> Re: [Archivesspace_Users_Group] AT Migration problem with repository processing note<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Hi Ian,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I’m not sure I have a great solution for this…<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">The refIDs in AT should be unique within the context of a resource and those refIDs should match the ASpace refID values before the underscore and extra characters
assigned by the migarator (e.g. ‘ref64’ in AT becomes ‘ref64_h5n’ in ASpace).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">I wonder if you could try matching on a combination of things, like the first part of the refID before the underscore and the ResourceComponent title? These
data elements are both in ATs ResourcesComponents table. There might be some false matches here if you have lots of common titles like “Correspondence,” but if your titles are somewhat unique it might be a good strategy. Depending on how many Repository
Processing notes you’re trying to move, you could also review the matches before pushing the updates to ASpace.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">A better strategy would be to match on the first part of the refID string and also the resource identifier (‘resourceIdentifier’ field in AT’s Resource table
and ‘identifier’ field in AS’s resource table). Determining the resource identifier based on a component’s refID might require some more advanced SQL. I haven’t done this, but others on the list might have.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">Any ideas?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">-Noah<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt;font-family:"Calibri",sans-serif">
<a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">archivesspace_users_group-bounces@lyralists.lyrasis.org</a> [<a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org">mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org</a>]
<b>On Behalf Of </b>Hardy, Ian<br>
<b>Sent:</b> Thursday, February 04, 2016 9:50 AM<br>
<b>To:</b> Archivesspace Users Group <<a href="mailto:archivesspace_users_group@lyralists.lyrasis.org">archivesspace_users_group@lyralists.lyrasis.org</a>><br>
<b>Subject:</b> Re: [Archivesspace_Users_Group] AT Migration problem with repository processing note<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hi Noah and others, one problem we're running into in moving these repository processing notes is that there doesn't appear to be a consistent identifier shared by the toolkit ResourcesCompoenents and Aspace archival_object table. In particular
the persitentIDs in toolkit are not unique in Aspace, so the Aspace migrator adds some extra characters at the end to create it's identifier, the ref_ID. Anyone have a recommended methodology for matching between the platforms? <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Ian<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Mon, Feb 1, 2016 at 4:37 PM, Hardy, Ian <<a href="mailto:ihardy@email.gwu.edu" target="_blank">ihardy@email.gwu.edu</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">Thanks Noah and Maureen, I was able to update some test repository processing notes using Noah's scripts as a starting point for interacting with the API. I think this will do the trick for us. <o:p></o:p></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">On Mon, Feb 1, 2016 at 10:52 AM, Noah Huffman <<a href="mailto:noah.huffman@duke.edu" target="_blank">noah.huffman@duke.edu</a>> wrote:<o:p></o:p></p>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<p class="MsoNormal">Christie,<br>
<br>
I have a script that sort of does what Maureen suggests. Was going to mention it earlier, but it's a bit undercooked....<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_noahgh221_archivesspace-2Dduke-2Dscripts_blob_master_duke-5Farchival-5Fobject-5Fmetadata-5Fadder.py&d=AwMGaQ&c=-dg2m7zWuuDZ0MUcV7Sdqw&r=s7ciGQfUJeaV_ryx908hbeXDoU9aqDwDN0Z0VbfsJ3Y&m=KdUdoHRjsxlxxbhvIQVs_HjNucajSMLTQKfZJigxEoo&s=jp009w-j5oaIIwIn_q56kxhqnS8C5zrlBnjseo8C2tc&e=" target="_blank">https://github.com/noahgh221/archivesspace-duke-scripts/blob/master/duke_archival_object_metadata_adder.py</a><br>
<br>
It can read a two-column spreadsheet (as TSV) and batch add Repository Processing notes to archival objects via the API based on ref_ID values in the spreadsheet:<br>
<br>
The example above is a modified version of a script that folks at the Bentley wrote:<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_djpillen_bentley-5Fscripts_blob_master_update-5Farchival-5Fobject.py&d=AwMGaQ&c=-dg2m7zWuuDZ0MUcV7Sdqw&r=s7ciGQfUJeaV_ryx908hbeXDoU9aqDwDN0Z0VbfsJ3Y&m=KdUdoHRjsxlxxbhvIQVs_HjNucajSMLTQKfZJigxEoo&s=FcmOPa2NB0nuOlkdbcSOotdEKfi3YBlfoBIDiLhRY7A&e=" target="_blank">https://github.com/djpillen/bentley_scripts/blob/master/update_archival_object.py</a><br>
<br>
The comments in the script should help you figure out what you might need to modify. For full disclosure, I'm a Python noob, so this is probably terribly written, but I can confirm that it works for my use case.<br>
<br>
-Noah<br>
<br>
-----Original Message-----<br>
From: <a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org" target="_blank">
archivesspace_users_group-bounces@lyralists.lyrasis.org</a> [mailto:<a href="mailto:archivesspace_users_group-bounces@lyralists.lyrasis.org" target="_blank">archivesspace_users_group-bounces@lyralists.lyrasis.org</a>] On Behalf Of Callahan, Maureen<br>
Sent: Monday, February 01, 2016 10:43 AM<br>
To: Archivesspace Users Group <<a href="mailto:archivesspace_users_group@lyralists.lyrasis.org" target="_blank">archivesspace_users_group@lyralists.lyrasis.org</a>><br>
Subject: Re: [Archivesspace_Users_Group] AT Migration problem with repository processing note<br>
<br>
Hey Christie,<br>
<br>
Doing it now, we would probably write a script to do an update using the API (better built-in validation, fewer opportunities to do something stupid). During the migration, there's a choice to keep or re-assign refids - you're definitely going to want to keep
those to help match up the components.<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal"><br>
It's worth noting that we made those SQL updates because of mistakes in the migrator. I'm interested to know if those ever got fixed.<br>
<br>
MC<br>
<br>
<br>
> On Feb 1, 2016, at 10:36 AM, Peterson, Christie <<a href="mailto:cspeterson@email.gwu.edu" target="_blank">cspeterson@email.gwu.edu</a>> wrote:<br>
><br>
> Hi Noah,<br>
><br>
> Yep, that's the kind of thing we're probably going to end up doing.<br>
><br>
> Many thanks!<br>
><br>
> Christie<br>
> _______________________________________________<br>
> Archivesspace_Users_Group mailing list<br>
> <a href="mailto:Archivesspace_Users_Group@lyralists.lyrasis.org" target="_blank">
Archivesspace_Users_Group@lyralists.lyrasis.org</a><br>
> <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lyralists.lyrasis" target="_blank">
https://urldefense.proofpoint.com/v2/url?u=http-3A__lyralists.lyrasis</a>.<br>
> org_mailman_listinfo_archivesspace-5Fusers-5Fgroup&d=AwICAg&c=-dg2m7zW<br>
> uuDZ0MUcV7Sdqw&r=JgH2YCQ8D3P9-Lm_x4bv3d2CZBYlbx6hxnLFHtfovi8&m=n1N3sMK<br>
> X9kb8hCXfWyWw-9rmsPmqB9BhN_6Kckdfo5g&s=XXk6iOoNajjfK6Ebn6n3Oe4cvYGTMPW<br>
> o6wDb_Hto0q8&e=<br>
<br>
_______________________________________________<br>
Archivesspace_Users_Group mailing list<br>
<a href="mailto:Archivesspace_Users_Group@lyralists.lyrasis.org" target="_blank">Archivesspace_Users_Group@lyralists.lyrasis.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lyralists.lyrasis.org_mailman_listinfo_archivesspace-5Fusers-5Fgroup&d=AwMGaQ&c=-dg2m7zWuuDZ0MUcV7Sdqw&r=s7ciGQfUJeaV_ryx908hbeXDoU9aqDwDN0Z0VbfsJ3Y&m=KdUdoHRjsxlxxbhvIQVs_HjNucajSMLTQKfZJigxEoo&s=5IlEg6G6_5s7Hwonjt7wZtU5RGdvO4vntjYAIgV7pcU&e=" target="_blank">http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_users_group</a><br>
_______________________________________________<br>
Archivesspace_Users_Group mailing list<br>
<a href="mailto:Archivesspace_Users_Group@lyralists.lyrasis.org" target="_blank">Archivesspace_Users_Group@lyralists.lyrasis.org</a><br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lyralists.lyrasis.org_mailman_listinfo_archivesspace-5Fusers-5Fgroup&d=AwMGaQ&c=-dg2m7zWuuDZ0MUcV7Sdqw&r=s7ciGQfUJeaV_ryx908hbeXDoU9aqDwDN0Z0VbfsJ3Y&m=KdUdoHRjsxlxxbhvIQVs_HjNucajSMLTQKfZJigxEoo&s=5IlEg6G6_5s7Hwonjt7wZtU5RGdvO4vntjYAIgV7pcU&e=" target="_blank">http://lyralists.lyrasis.org/mailman/listinfo/archivesspace_users_group</a><o:p></o:p></p>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
<p class="MsoNormal"><span class="hoenzb"><span style="color:#888888">-- <o:p></o:p></span></span></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#888888">Ian Hardy</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888">Systems Specialist<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888">GW Libraries<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:#888888"><a href="mailto:ihardy@email.gwu.edu" target="_blank"><span style="font-size:10.0pt">ihardy@gwu.edu</span></a><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt;color:#888888">helpdesk: (202) 994</span><span style="color:#888888">-8278<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal">-- <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt">Ian Hardy</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Systems Specialist<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">GW Libraries<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><a href="mailto:ihardy@email.gwu.edu" target="_blank"><span style="font-size:10.0pt">ihardy@gwu.edu</span></a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:10.0pt">helpdesk: (202) 994</span>-8278<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>