Meeting with MT, and further progress:
Next task for me: work on a TEI version of one of the modern cast lists, as an example encoding, and also create XSLT to generate from it the XHTML version that is currently displayed.
... on RL's instructions.
Wrote a couple more trivial XSLTs to build searchable texts. Also built a working exist war file, installed Tomcat on Plum and deployed the war for our test purposes.
Added the latest video, embedded from YouTube.
One annoyance I should document here: in order to get embedded YouTube video working, I had to use iframes, and getting valid code required rolling back to the XHTML 1.0 Transitional doctype. Grrr.
Added an abstract per JS-R.
Met again with MT, and we looked more closely at issues facing us with regard to the underlying encoding of texts, and how we might construct a search engine that supports or avoids them appropriately.
Finally, MH will build up the Plum box as a test server so we can work without any effect on the live server.
ER reported this problem:
- go to http://www.malahatreview.ca/ecommerce/gifts.html
- select 1 Year subscription Canada
- click Add to Cart
- Get this alert:
The page must be viewed over a secure channel
The page you are trying to access is secured with Secure Sockets Layer
(SSL).
Please try the following: Type https:// at the beginning of the address
you are attempting to reach and press ENTER.
Problem was in the action on the form, where there was a missing "s" in the protocol in the return address argument:
<form id="giftsub" name="giftsub" method="post"
action="https://www.beanstream.com/scripts/cart/add_item.asp?merchant_id=215310026&return=http%3A%2F%2Fwww%2Ebeanstream%2Ecom%2Fscripts%2Fcart%2Fview%5Fcart%2Easp">
I suggested she change "return=http...." to "return=https..." and test. She did that and everything worked.
Met with CC of ling to talk about problems with AD'A's laBB-CAT. It's currently running on an apple server in a room in linguistics. CC had it running, but was unable to get the user authentication stuff promised in the software to work, and then had issues when a new version of Java was installed on the server. CC interested in investigating having the server stuff moved off the machine in the ling lab and to a more robust environment.
If HCMC were to be involved, the instance would have to move to a virtual machine running on our VM server. AD'A would have to pay sysadmins to maintain the virtual machine, and would have to nominate someone to maintain the apps running within that machine and manage the users within the program (possibly with some consulting help from HCMC).
Decided to spend a couple of Greg's hours on a basic install (which includes incorporating two or three other services/libraries) on a virtual machine. If that's technically feasible, then we'll start investigating the user authentication issues, and get AD'A to commit to the plan.
Took minutes at my first MVP board meeting.
On KE's instructions.
Met with MT to plan work on improving the ISE search. The biggest barrier as far as I can see is the sheer complexity of the scarcely-documented tagging system, combined with the range of different textual components that need to be separately searchable. We know we want to deploy a snowball analyzer, which means we'll probably have to replace the kwic module in exist with our own, but before we get that far, we need to test a range of search strategies to see how fast they can be. One approach I'm starting on is to generate very simple versions of all of the files designed for specific search targets (lines of plays/poetry; metadata; etc.). The process of creating these is helping me to get familiar with the ISE encoding, which will help later one whatever approach we end up taking. Ultimately, we should also be looking at producing an archive version of the core encoding for each play using TEI, and it seems to me that the current representation could perfectly well be converted to TEI, and would be a lot simpler as a result.
Meeting about strategy for MVP resources, sites and source management. See my summarizing email for details (sent today).
On instructions from LR, through EGW, made some fixes to linking, but these threw up more issues that are still unresolved. A thorough proofing of the P5 encoding is now needed; at the moment, I'm trying to maintain both P4 and P5, and that's not practical.
Various updates over the past couple of days on instructions from RL, KE and JS-R.
TM needed to convert a large series of jp2 images to something else, so I wrote a little bash script to do that. It looks like this:
#!/bin/bash
DIR=`zenity --file-selection --directory --title="Select a File or Folder"`
PICS=`find $DIR -type f -path "*\.jp2"|sed 's/\.\///g'`
COUNT=`find $DIR -type f -path "*\.jp2"|sed 's/\.\///g'|wc -l`
START=$COUNT
(for img in $PICS
do
((COUNT-=1))
PERCENT=$((100-100*COUNT/START))
echo "#Images to convert: $COUNT"
mogrify -format jpg $img
echo $PERCENT
done) | zenity --progress --auto-close --title="Mogrifier" --text=""</code>
zenity --question --cancel-label="Keep" --ok-label="Delete" --title="Delete JP2 files" --text="Would you like to <b>keep</b>\nor <b>delete</b> the JP2 files?"
if [ "$?" = 0 ];then
# delete the jp2 files
rm -f $DIR/*.jp2
count=`ls -1 *.jp2 2>/dev/null | wc -l`
if [ $count = 0 ]
then
zenity --info --timeout 10 --title="All done" --text="All <b>jp2</b> files have\nbeen removed."
fi
else
exit 1
fi
and has a launcher (batchy.desktop) that looks like this:
[Desktop Entry]
Version=1.0
Name=Batchy
GenericName=Batchy
Comment=Convert JP2 images to JPG
Exec=/usr/local/bin/batchyjp2.sh
Icon=gnome-panel-launcher
Terminal=false
Type=Application
Categories=GNOME;GTK;
Per EGW, fixed a reported misidentification of an individual, and adding a new bibliographic item. Now I have to keep the P4 and P5 encodings in sync, which is a bit time-consuming.
Because we changed the domain names for the etcl word-press site, we had to make changes to the wp-options table (WordPress address and Site address) and a global search and replace in the posts table because the URL field for each post has a hard-coded absolute URL which had to be changed. Based on instructions at http://codex.wordpress.org/Moving_WordPress. It is important to make the changes in all the paths while there is no activity in the WordPress GUI.
RC sent me the HotPot data files, which are now rendered and integrated into the departmental site.
First one for a long while.
Used the following html and css to allow a thumbnail image to be a link which when clicked on causes the fullsize version of the image to appear. My test uses the same image file for both and simply sizes it with css to create the thumbnail, but in reality, I'd create separate, small thumbnail images.
Here's the php which generates the page images from an array of relative URLs. In my case that array is populated from the images variables in a $poem object, which is populated from a database call, but anything that puts relative URLs into the array will do.
$imagesArray = explode("\n",$poem->images); /* each item in array consists of path from a baseURL to the image */
echo sprintf('Page Image%s', count($imagesArray) > 1 ? 's: ' : ': ');
echo ' <br />';
/* this is based on more complex code at http://tympanus.net/Tutorials/CSS3Lightbox/index.html */
foreach ($imagesArray as $pageImageFromArray) {
echo '<a href="#pageImage-'.$inc.'">';
echo '<img class="pageImageOverlayThumb" alt="page image small" src = "http://www.tapor.uvic.ca/~vicpoems/page_images/'. $pageImageFromArray.'" ';
echo ' title="click to see bigger image of page" />';
echo '</a>';
echo '<div class="pageImageOverlay" id="pageImage-'.$inc.'">';
echo '<img alt="page image large" src = "http://www.tapor.uvic.ca/~vicpoems/page_images/'. $pageImageFromArray .'" />';
echo '<a href="#page" class="pageImageOverlayClose">x Close</a>';
echo '</div>';
}
which generates something like:
<a href="#pageImage-1>
<img class="pageImageOverlayThumb" alt="page image small" src = "http://www.tapor.uvic.ca/~vicpoems/page_images/myFirstImage.jpg" title="click to see bigger image of page" />
</a>
<div class="pageImageOverlay" id="pageImage-1">
<img alt="page image large" src = "http://www.tapor.uvic.ca/~vicpoems/page_images/myFirstImage.jpg" />
<a href="#page" class="pageImageOverlayClose">x Close</a>
</div>
And here's the CSS:
/* the .pageImageOverlay styles based on more complex code at http://tympanus.net/Tutorials/CSS3Lightbox/index.html */
.pageImageOverlay{
width: 0px;
height: 0px;
position: fixed;
overflow: hidden;
left: 0px;
top: 0px;
padding: 0px;
z-index: 99;
text-align: center;
background: rgba(64,64,64,0.8);
display:inline;
}
.pageImageOverlay a.pageImageOverlayClose{
background: rgba(27,54,81,0.8);
z-index: 1001;
color: #fff;
position: absolute;
top: 43px;
left: 50%;
font-size: 15px;
line-height: 26px;
text-align: center;
width: 50px;
height: 23px;
overflow: hidden;
margin-left: -25px;
opacity: 0;
}
.pageImageOverlay img{
max-height: 100%;
position: relative;
opacity: 0;
border:1px solid #999999;
margin-left: 0.5em;
padding:0.25em 0.25em;
}
.pageImageOverlay:target {
width: auto;
height: auto;
bottom: 0px;
right: 0px;
padding: 40px 10px 10px 10px;
}
.pageImageOverlay:target img,
.pageImageOverlay:target a.pageImageOverlayClose{
opacity: 1;
}
img.pageImageOverlayThumb {
border:1px solid #999999;
margin-left: 0.5em;
padding:0.25em 0.25em;
width:120px;
}
We had a number of people who were unable to submit round-table (or other multi-presentation sessions) through the conference interface. I helped PD do some research and she came up with a workaround, as the technically suggested solution seemed overkill for their needs.
One person is selected to submit the submission for the panel session.
That person
- collects the paper abstracts and CVs from all the participants in the
panel and assembles those into one (or as few as possible) document(s)
- puts the abstract for the whole panel in the "abstract" text box in
step 2 ("Enter Metadata") of the submission process
- uploads the document(s) that includes all the collected paper
abstracts and presenter's CVs in step 3 ("Upload Supplementary Files")
of the submission process. You will be asked to provide a Title and may
include or ignore the other metadata fields for your supplementary file.
- submits the panel proposal
JS wanted to create two wp sites, each with a virtual domain name (maker.uvic.ca and dance.uvic.ca). Based on recent events with etcl and dhsi, I knew to create two separate instances of front end, and to make things simpler, the backend too (though I could have got away with only one backend by taking some care in the table-name prefixes for each instance).
Provisioned space on our server for this, but then discovered that other people in the dance project wanted the frontend on the unix.uvic.ca server (not sure why exactly), so that meant the back-end sql database had to be theirs and not ours, so got that set up.
For the maker instance, set up a db on our sql db server and I think everything is now sorted out.
See email forwarded from EGW November 9 re Ethel Herdman.
Added a video on RL's instructions.
Met with RM, and we went through the procedures for uploading images to the file system, linking them to the db, and creating new db entries.
Sysadmin fixed the permissions problems for me, so I was able to:
All the links in the db are working, with the exception of these two, whose images appear to be missing:
In both cases, they form part of a sequence of pages, and the other images in the sequence are there. You might want to check whether there are copies of the images on your drive which can be retrieved, or capture those pages again.
The only remaining problems in the database right now are these:
I can't do anything about the first problem; only a human can examine each image and decide whether it's an image of an illustration or not. I could fix the second problem programmatically, by splitting out the instances of illustration titles into a new separate field designated for illustration titles, and leaving the image links in place in the 12 cases which have them. Alternatively, we could fix this as part of the larger expansion of the db structure we're intending to do in the next few weeks, which will give illustrations its own table. Let me know if you have a preference there.
Overall, though, RM should now be able to continue her work adding new images and linking them in the database.
Preparation for and meeting with RM:
Met with SA and AC, and we planned out the next phase, which involves getting page-images available on the Wordpress site. These are the steps (task assigned to me because my work has to be done before SA can get to work):
We also discussed research components for the future grant application: automated rhyme-scheme detection, automated meter detection, and genre detection.
Met with SM re French reading course which will be going online, and medieval manuscript digitization project.
Added new info about City Walks for VG, and about the Lansdowne lecture for KE.
Switching of photo on DR's instructions.
Substantial updates to the site on DR's instructions.
A couple of people submitting in French have received acknowledgement emails in English. As a kludge, I included both French and English texts for the The "New User Registration" and "Submission Acknowledgement" in the English email template by editing the appropriate items in the Prepared Emails section in the Conference Site Management.
So far we know about these language settings available to the user:
- Language [for the interface] (single select dropdown on all pages)
- Working Language in the User Registration form (checkboxes)
- Form Language in the submission form (single-select dropdown)
And these settings in Conference Site Management / Languages:
- Primary locale [currently English, other choice is Français]
- Supported locales for UI [English and French enabled]
- Supported locales for Forms [English enabled, French disabled - to
address bug in proposal submission process]
I'm not sure how the software decides which of these settings to use to figure out which language to use for each of these various emails, but there seems to be problems with the language support. Wrote detailed bug report to SC in library.
Discussed generating metadata from Scalar as RDF for transformation to CSV for insertion into ContentDM; transformation of TEI transcriptions into XHTML and customization of stylesheets; possibility of building an eXist web application; and linking between web version of transcriptions and TIFFs in ContentDM.
Discovered that if the Language setting is French and in the submit a proposal form the Form Language setting is French, then when you try to submit Step 2 the system tells you the title and summary fields are empty and won't let you proceed. No way I could see around this problem, other than to change the Form Language setting to English. Doing so causes all the fields in the form to be emptied, but if you then fill them in again (in French or English), then click Continue, it works. That's a bit of a show-stoppper.
IK and SC in the library seem to have problems reproducing it, and say the problem only seems to manifest itself in the CHASHC site. I'm going to see if I can get a test conference set up and see if I get the same behaviour.
Minor bug: if the interface Language is set to French, then the title for Step 3 in the submit a proposal page shows the lookup key and not the French value. The english works. This is not a show-stopper.
The Latin American Studies program has some javascript controlling an image "rotator" (i.e. display an image for x seconds, then display another). Previously the code randomly selected an image from the list. I changed the code so that the first image is randomly selected and then each image is shown in order, and when the code gets to the end of the list, it starts over at the beginning again. I included a feature that stops the rotating after all images have been displayed once, but the dept wanted that disabled so the images would 'rotate' indefinitely.
In doing that I also modified the css to fix the containing p element's height so that the page content didn't appear to jump up for a second while an image was downloaded from the server.
Susan of the Malahat Review was frequently (but not always) getting "sharing violation" errors when she tried to save changes to the website in dreamweaver. This problem arose only since they purchased a new computer and put Payment Card Industry security software on it, as part of the move to online payment processing.
This was frustrating for her, and so JB wrote to the finance people on the theory that the problem must have something to do with the PCI software. I got a copy.
RE of finance came over for an hour + (I observed from the corner). Susan was able to reproduce the problem. RE used a similar, but obviously slightly different procedure as he wasn't able to reproduce the problem using his natural workflow, but was if he followed step by step instructions from Susan. So, by end of that meeting it looked like there was a way that one could avoid the sharing violation, but Susan wasn't sure what it was. Nobody had a good idea why those sharing violations were appearing in the first place - focus was on a workaround.
I went back a week or so later and Susan was still tending to get the problem. We went through a number of procedures slowly and pinned down a procedure that seemed to work and the variants that threw the sharing violation. By the end of that meeting Susan seemed more confident that she could avoid the problem - though of course we still hadn't solved the issue of why the errors were appearing in the first place.
Did updates to the Beck site on PAB's instructions.
Several minor updates in batches from three different submitters.
For the new ETCL site, I have a copy in etcl/www/wordpress. I want the instance to be in etcl/www/wordpressETCL.
Created a copy of the wordpress folder
edited the rewrite rules in the htaccess file in the new instance to point to that instance
ran the utility program obtained through http://interconnectit.com/124/search-and-replace-for-wordpress-databases/ to update all the hard-coded strings in the database by searching for:
hcmc.uvic.ca/~etcl/wordpress/
and replacing with:
hcmc.uvic.ca/~etcl/wordpressETCL/
Now have what appears to be a working instance at http://hcmc.uvic.ca/~etcl/wordpressETCL/ and of course the instance at http://hcmc.uvic.ca/~etcl/wordpress/ now fails because it is also pointing at the db modified by the utility program.
Previously I had tried to manually update only the wp_posts table with this SQL:
UPDATE `wp_posts`
SET guid=(
REPLACE (guid,
'hcmc.uvic.ca/~etcl/wordpressETCL/',
'hcmc.uvic.ca/~etcl/wordpress/'));
In previous attempts it had worked, and it did this time too, but I think I may have got into a tangle with non-updated htaccess files and versions of various files cached by WP or APACHE of the browser for that matter.
Now, I intend to get the sysadmins to point the virtual domain name etcl.uvic.ca to that new instance. The domain is currently pointed at ~etcl/www/public/blogs.
Notices thrown on the ETCL dev site (http://hcmc.uvic.ca/~etcl/wordpress/):
Notice: register_widget_control is deprecated since version 2.8! Use wp_register_widget_control() instead. in /etcl/www/wordpress/wp-includes/functions.php on line 2638
Notice: Undefined index: ec3_before in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 995
Notice: Undefined variable: a in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 996
Notices thrown on the INKE prod site (http://inke.ca/ or http://hcmc.uvic.ca/~etcl/wordpressINKE/):
Notice: add_custom_background is deprecated since version 3.4! Use add_theme_support( 'custom-background', $args ) instead. in /etcl/www/wordpressINKE/wp-includes/functions.php on line 2638
Notice: register_widget_control is deprecated since version 2.8! Use wp_register_widget_control() instead. in /etcl/www/wordpressINKE/wp-includes/functions.php on line 2638
We can suppress the display of these notices by editing the wp-config.php file in the root of each wp site from
define('WP_DEBUG', true);
to
define('WP_DEBUG', false);
I will download the two sites and try to find the instances where the problem methods are being called. If they're in ETCL-written code, then I'll try to fix them. If they're in WP or plugin code, I'll probably leave them alone.
New bio and abstract info, and photos, added at KE's request.
Met with MH to discuss early plans for encoding and versioning of some Joyce texts.
Two more minor changes on KE's instructions.
Added a new page about a Lansdowne Lecture on JS-R's instructions, and linked it from several places.
Added new content for this semester's talks on KE's and JS-R's instructions. Still negotiating about what the site redesign should look like.
Changes to course information on SA's instructions.
At JW's request, converted the Court field in the main Trial table from a single item to a one-to-many. Here's the SQL:
/*Create the new linking table.*/ CREATE TABLE IF NOT EXISTS `courts_to_trials` ( `ctt_ctt_id` int(11) NOT NULL auto_increment, `ctt_tr_id_fk` int(11) default NULL, `ctt_ct_id_fk` int(11) default NULL, PRIMARY KEY (`ctt_ctt_id`), KEY `ctt_ibfk_1` (`ctt_tr_id_fk`), KEY `ctt_ibfk_2` (`ctt_ct_id_fk`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ; /*Add constraints to the new linking table.*/ ALTER TABLE `courts_to_trials` ADD CONSTRAINT `ctt_ibfk_1` FOREIGN KEY (`ctt_tr_id_fk`) REFERENCES `trial` (`tr_id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `ctt_ibfk_2` FOREIGN KEY (`ctt_ct_id_fk`) REFERENCES `court` (`ct_id`) ON DELETE CASCADE ON UPDATE CASCADE; /*Copy existing data.*/ INSERT INTO `courts_to_trials` (`ctt_tr_id_fk`, `ctt_ct_id_fk`) (SELECT `tr_id`, `tr_court` FROM `trial`); /*Delete original field.*/ ALTER TABLE `trial` DROP FOREIGN KEY `tr_ibfk_1`; ALTER TABLE `trial` DROP COLUMN `tr_court`;
Updated the local_classes.php file appropriately. Tested on dev, then ran on live. In the process of testing, found a little bug: when deleting a record, the table that comes back still has all the old column-header filter fields in it. I'll fix that now.
New account on home1t has been set up for storage of page-images, so I've set up the db to point to it, and tested it. I've also tweaked the dev_to_live_update.sh script so it doesn't copy itself into the live db tree.
Changed a title and added a poster on JS-R's instructions; also did some research on easy ways to do free event registration, and found three plugins that might be usable. This will be required for one of the talks, which will be a big draw, and must be limited to 80 attendees.
On instructions from JW, added a new table and two new fields to the db. Tested first in dev, then carried out the same changes in live. SQL:
CREATE TABLE IF NOT EXISTS `period` ( `pd_id` INT NOT NULL AUTO_INCREMENT , `pd_name` varchar(128) collate utf8_unicode_ci default NULL , PRIMARY KEY (`pd_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `period` (`pd_id`, `pd_name`) VALUES (1, '[Unassigned]'); INSERT INTO `period` (`pd_id`, `pd_name`) VALUES (2, 'AR'); INSERT INTO `period` (`pd_id`, `pd_name`) VALUES (3, 'FR'); ALTER TABLE `trial` ADD COLUMN `tr_period` INT(11) NULL AFTER `tr_cote`; ALTER TABLE `trial` ADD COLUMN `tr_photos` INT(11) NULL AFTER `tr_description`; ALTER TABLE `trial` ADD CONSTRAINT `trial_ibfk_3` FOREIGN KEY (`tr_period`) REFERENCES `period` (`pd_id`) ON DELETE SET NULL ON UPDATE CASCADE;
Corresponding changes made to local_classes.php. Also wrote a script to copy data from live to dev db, and fixed a minor bug in the dev_to_live_update.sh script.
Made a number of changes, on BB's instructions.
...completion of work started last Friday, on DR's instructions.
The old site is still the live site, and will be for a while, so we're still updating it. Did some updates on DR's instructions.
I'm just mapping out what I have so far from AC, based on our recent discussions. This will probably change a lot before implementation.
As documented in the AdaptiveDB blog, I've done the basic enhancements to the AdaptiveDB codebase that were specified for phase one of VPN. I'll roll out the results to the live DB tomorrow. The only remaining tasks for me arising out of the meeting the other day are: the requirement to generate a bash script to check links automatically (still haven't figured out the best way to approach that), and the alteration of the db structure to hive off the illustrations (still waiting on feedback from AC on that one).
I've gone through SR's spec document for the form he wants to create to gather metadata from the authors of the articles in his encyclopedia. Quick and dirty would be SurveyMonkey, but it's not really set up to allow the user to add additional elements to the survey form. (e.g. name major works associated with artistic movement X and rate that work's importance outside the movement). I'm not sure he'll be willing to compromise the look and feel of the form to the degree I think will be required by SurveyMonkey.
Also created a very small ajax site that does allow the user to add elements to the form, and then processes the values of those elements to generate strings that go into an SQL db. Major concern is what to use as delimiters within those text strings. E.G. if the field in the DB is called Question1 and there are an arbitrary number of fields in the form whose values I must concatenate to produce the string that goes into Question1, what do I use to delimit each of those values from the form field? We're only using the SQL db as a temporary repository, so I don't really want to go to the bother of creating a full-on set of relational tables and all the code to modify then properly.
Met with AC and worked out details of the phase-1 enhancements agreed by the HCMC Committee:
Adaptive DB enhancements and data reorganization:
Search interface enhancements:
Added the list of new lectures scheduled for this year, and tweaked the committee list, per JS-R.
Cam had some h5 and h6 elements in the documentation files (I suspect the h level is derived by the XSLT from the nesting of the actual elements in the data files), but I could find no selectors for those elements in the css. So, wrote a selector for each to make them consistent with the h1 through h4 headings.
Emailed Martin in case those modifications had some unknown implications.
Here's the summary of how things stand and what we want to happen with each of the host and domain names used by ISE.
In the new scheme we will have the domain ise.uvic.ca underlying all the production sites. For the development sites, do we have the same domain underlying all the production sites or a separate domain (e.g. isedev.uvic.ca)? In the stuff below, I'm assuming a separate isedev.uvic.ca domain for dev sites.
The proposal uses only 1 IP address, rather than the current 4. Greg and Evan's bunch may need to talk further about actual hardware setup (servers, load balancers etc.) and number of IP addresses needed.
-----------------------------------------------------------------------
Summary of proposed mapping from IP for ISE-related domain and host names
-----------------------------------------------------------------------
IP: 142.104.21.XXX
_domain: ise.uvic.ca
_ _host: dre.internetshakespeare.uvic.ca
_ _host: internetshakespeare.uvic.ca
_ _host: isechronicle.uvic.ca
_ _host: qme.internetshakespeare.uvic.ca
_domain: isedev.uvic.ca
_ _host: dre.internetshakespeare.uvic.ca:8081
_ _host: internetshakespeare.uvic.ca:8081
_ _host: isechronicle.uvic.ca:8081
_ _host: qme.internetshakespeare.uvic.ca:8081
?Greg re: manatee.hcmc.uvic.ca
?Brett re: digitalrenaissance.uvic.ca (replace with dre.internetshakespeare.uvic.ca)
?viola.tapor.uvic.ca
?shakey.tapor.uvic.ca
-----------------------------------------------------------------------
Summary of current mapping from IP for ISE-related domain and host names
-----------------------------------------------------------------------
IP: 142.104.21.179
_domain: ise.uvic.ca
_ _host: internetshakespeare2.uvic.ca
_ _host: isebeta.uvic.ca
_ _host: isechronicle.uvic.ca
IP: 142.104.21.180
_domain: ise2.uvic.ca
_ _host: dre.isebeta.uvic.ca
IP: 142.104.21.181
_domain: internetshakespeare.uvic.ca
_domain: iselive.uvic.ca
_ _host: digitalrenaissance.uvic.ca
_ _host: dre.internetshakespeare.uvic.ca
_ _host: dre.uvic.ca
_ _host: qme.internetshakespeare.uvic.ca
_ _host: qme.uvic.ca
IP: 142.104.21.178
_domain: manatee.hcmc.uvic.ca
IP: 142.104.21.168
_domain: shakey.tapor.uvic.ca
_ _host: viola.tapor.uvic.ca
-----------------------------------------------------------------------
Details for each host or domain name:
-----------------------------------------------------------------------
digitalrenaissance.uvic.ca
- current: digitalrenaissance.uvic.ca CNAME iselive.uvic.ca A 142.104.21.181
- future: ask Brett if we can abandon this hostname, if not then map by CNAME to ise.uvic.ca
dre.internetshakespeare.uvic.ca
- current: dre.internetshakespeare.uvic.ca CNAME iselive.uvic.ca A 142.104.21.181
- future: map by CNAME to ise.uvic.ca
dre.isebeta.uvic.ca
- current: dre.isebeta.uvic.ca CNAME ise2.uvic.ca A 142.104.21.180
- future: replace with dre.internetshakespeare.uvic.ca:8081 which maps by CNAME to isedev.uvic.ca
dre.uvic.ca
- current: dre.uvic.ca CNAME iselive.uvic.ca A 142.104.21.181
- future: abandon
internetshakespeare.uvic.ca
- current: internetshakespeare.uvic.ca A 142.104.21.181
- future: map by CNAME to ise.uvic.ca
internetshakespeare2.uvic.ca
- current: internetshakespeare2.uvic.ca CNAME ise.uvic.ca A 142.104.21.179
- future: abandon
ise.uvic.ca
- current: ise.uvic.ca A 142.104.21.179
- future: domain name which anchors to an IP, underlies all production hosts
isebeta.uvic.ca
- current: isebeta.uvic.ca CNAME ise.uvic.ca A 142.104.21.179
- future: replace with internetshakespeare.uvic.ca:8081 which maps by CNAME to isedev.uvic.ca
isechronicle.uvic.ca
- current: isechronicle.uvic.ca CNAME ise.uvic.ca A 142.104.21.179
- future: map by CNAME to ise.uvic.ca
isedev.uvic.ca
- current: doesn't exist
- future: if needed: domain name which anchors to an IP, underlies all development hosts
iselive.uvic.ca
- current: iselive.uvic.ca A 142.104.21.181
- future: abandon
ise2.uvic.ca
- current: ise2.uvic.ca A 142.104.21.180
- future: abandon
qme.internetshakespeare.uvic.ca
- current: qme.internetshakespeare.uvic.ca CNAME iselive.uvic.ca A 142.104.21.181
- future: map by CNAME to ise.uvic.ca
qme.uvic.ca
- current: qme.uvic.ca CNAME iselive.uvic.ca A 142.104.21.181
- future: abandon
manatee.hcmc.uvic.ca
- current: manatee.hcmc.uvic.ca A 142.104.21.178
- future: talk to Greg
viola.tapor.uvic.ca
- current: viola.tapor.uvic.ca CNAME shakey.tapor.uvic.ca A 142.104.21.168
- future: talk to Greg and Max
shakey.tapor.uvic.ca
- current: shakey.tapor.uvic.ca A 142.104.21.168
- future: talk to Greg and Max
-----------------------------------------------------------------------
Priorities from ISE
-----------------------------------------------------------------------
However we restructure, we _must_ keep these domains:
- internetshakespeare.uvic.ca
- dre.internetshakespeare.uvic.ca
- qme.internetshakespeare.uvic.ca
- ise.uvic.ca
- isechronicle.uvic.ca
- digitalrenaissance.uvic.ca
In addition, we need unique domains for beta versions of both ISE and
DRE (currently, these are isebeta.uivc.ca and drebeta.uvic.ca).
In the future, we may need to add additional sub-sites (eg.
xyz.internetshakespeare.uvic.ca) with a related beta domain for each.
As Michael already explained, it's important that we keep the ISE
branding on all sub-site domains. digitalrenaissance.uvic.ca is the
only exception to this, but even it should be redirecting to an
ISE-branded domain. We _should not_ be creating additional *.uvic.ca
domains in the future.
Asked sysadmin about my request to get inke.ca pointed to the wp blog, which had been languishing for weeks. They got back an hour later with the change made.
Then had to make modifications to a couple of tables in the back-end database.
The navigational superstructure relies on two values in the wp_options table
change value of siteurl to http://inke.ca
change value of home to http://inke.ca
The guid field of the wp_posts table contains absolute URLs to the post, so I had to issue the following SQL query to set those to the desired domain name:
UPDATE `wp_posts`
SET guid=(
REPLACE (guid,
'inke.uvic.ca/',
'inke.ca/'));
http://hcmc.uvic.ca/blogs/index.php?blog=16&p=9771&more=1&c=1&tb=1&pb=1
Set up a new db for JW, who needs it urgently, using AdaptiveDB codebase. Made a couple of additions to the codebase (maintenance script).
LW noticed that a number of courses that should have prerequisites listed didn't. I confirmed.
First guess was that the markup in the calendar html had changed so the regexp in the create course listing array functions were failing. Disproved that by labouriously testing the output of each regexp line.
There is a test in the code that says if you can't find the course in the current calendar AND the summer and winter sessions are looking at different calendars, look in the previous calendar (for cases where a course has been delisted but is still on offer for one last summer session). The actual syntax for the first part of that test was "$information.length < 1" which looks reasonable. In fact, "$information.length" is syntactically nonsensical, but rather than generate an error, it generates 0 which of course tests as < 1 so the whole thing tests as true. The test should read "strlen($information) < 1".
The rest of the conditional only mattered if a) you're in the months of June, July or August; b) the courses have been renumbered between last year and the current year. This is the first time since the code was written that all the conditions in the multiple-condition test were true, so the conditional block of code was executed and the wrong values put into the array.
When I replaced the incorrect bit of syntax the code worked properly.
Did a bit of research and talked with Greg about best technology for the uni101 situation (described in previous post). Settled on phpbb as likely solution and recommended it to them with specific pages on the the phpbb site to look at for features and capabilities. They did so and agree it is worth proceeding.
They have a netlink account for the front-end. I requested a mysql db for the back-end which I got. Will meet later this week to install and start configuring the software.
Discovered a couple of things:
When user creates a new account, the role of Reader is always available and is checked by default. If the user unchecks that and creates the account, then they are members of the conference but have no role. I'm not sure why that's allowed.
If the current date is in the range specified in Author registration opened and Author registration closed in the Current Conference / Timeline admin page, then the role of "Author" also appears on the Create New Account form, but is unchecked by default. Only the db-admin can modify that and it affects all conferences in the system. If the user does not check that Author checkbox, then they are not entitled to submit a proposal.
If the current date is NOT in the range specified in Author registration opened and Author registration closed in the Current Conference / Timeline admin page, then the Author checkbox does not appear, so the user cannot give themselves permission to submit.
The user is not able to make themselves an author after the fact either - they have to write to the conference admin who can add that role to that user. We're trying to get the library to change that form so that if the Author checkbox is displayed, it is checked by default.
meeting with PB and JSR of history to discuss the best way to handle the submission and review of abstracts for the 2013 CHA meeting. Decided to try the conferences.uvic.ca because of its support for the review workflow. What'a not so flexible or simple is creating the pages the end user actually sees - the configuration interface does not have the concept of a representation of a page that the user sees. It assembles those from fields drawn from all over the place in the admin interface, plus a ton of code and other elements that the site manager has no control over.
Trying to simplify the site for your average user. Made some modifications to the site-specific css file to display:none a number of elements in the navigation bar, as there seems to be no way to suppress their display in the site configuration interface. For some use the selector div#navbar ul.menu li:nth-child(x) to select the entire li, for others had to settle on div#navbar ul.menu li a[href$=xxxxx] because the order and number of the li's changed depending on if user was logged in or not. The 'a'-based selector leaves a bit of horizontal space in the GUI, but as it turns out, that's OK. Still the whole thing is a kludge to suppress the unwanted navigation items and simplify the UI.
I suspect that the nth-child may not be well supported by IE.
Also worked out the URLs to pages that the user is likely to want and provided links to those in the body text of the home page and in the navigation bar.
Got sysadmins to create a virtual domain name (inke.uvic.ca) and point it to the directory on our server containing the root of the etcl wp install. Fine. Problem is that all the internal navigation in WP uses hard-coded URLs. Some of those are actual paths to files in the wp structure, others are partially paths and partially arguments which are passed to the mysql db. In principle it's very difficult to modify only and all the URLs which are partially arguments.
The WP help documentation and plugins regarding this kind of thing all assume that the wp instance is at the root of the server, which is not the case for us. The docs say that it's pretty hard to do this if you have a multi-blog instance and it is not at the root. I tried installing and running the plugin and sure enough it told me that it would work only if the instance was in the root of the server.
Next attempt was to write some redirects in the htaccess file so that if the URL incoming contained the old domain name to reroute to the same file but at the new domain name. As far as I can tell, something within WP caused this to become an infinite recursion, so that obviously didn't work.
Next tried to modify values in the mysql database based on http://codex.wordpress.org/Moving_WordPress
in table wp_blogs
originally
domain:hcmc.uvic.ca
path:/~etcl/wordpress/inke/
revised to
domain:inke.uvic.ca
path:/
in table wp_2_options
originally
siteurl: http://hcmc.uvic.ca/~etcl/wordpress/inke/
home: http://hcmc.uvic.ca/~etcl/wordpress/inke/
fileupload_url: http://hcmc.uvic.ca/~etcl/wordpress/inke/files
revised to
siteurl: http://inke.uvic.ca/
home: http://inke.uvic.ca/
fileupload_url: http://inke.uvic.ca/files
in table wp_2_posts
UPDATE `wp_2_posts`
SET guid=(
REPLACE (guid,
'hcmc.uvic.ca/~etcl/wordpress/inke/',
'inke.uvic.ca/'));
That spewed a lot of errors in the site. The change in the guid had no apparent effect, but the other modifications were obviously being applied to not only inke-specific references, but references to the etcl wp installation, and those failed.
Undid the changes, so everything is as it was. inke.uvic.ca points at the home page for the site, but otherwise all inke pages are in the domain hcme.uvic.ca/~etcl/wordpress/inke. If you manually replace hcmc.uvic.ca/~etcl/wordpress/inke with inke.uvic.ca, the page loads properly, so that virtual domain is certainly working, just does not look like we're going to be able to get a multiple-blog wp instance to use that virtual domain name.
Sysadmin advises to put each blog in its own instance of WP.
PAB brought them, and I integrated them into the site and tested.
I get the following php notices when I set WP_DEBUG to true in my wp-config.php file.
Notice: Undefined index: ec3_before in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 993
Notice: Undefined variable: a in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 994
Those are being thrown by the last two lines of this block from eventcalendar3.php
if( !empty($wp_query->query_vars['ec3_after']) )
$a=$wp_query->query_vars['ec3_after'];
else if( !empty($wp_query->query_vars['ec3_from']) )
$a=$wp_query->query_vars['ec3_from'];
$b=$wp_query->query_vars['ec3_before'];
if( $a=='today' )
I've been unable to figure out how to ensure those entries in the query_vars array have sensible values. I've posted to the support group for the plugin, but it doesn't look very lively, so I'm not too optimistic. It looks like we can suppress the notices and the functionality is more or less OK (the content area's single item or listing on What's New in shows up, but I suspect the widget in the sidebar isn't working properly).
In wp-content/plugins/event-calendar-3-for-php-53.php, there is this function call:
load_plugin_textdomain('ec3','wp-content/plugins/'.$mydir.'/gettext');
That 2-argument signature is deprecated. There should be three arguments, the second of which is "false, ". Like this :
load_plugin_textdomain('ec3',false,'wp-content/plugins/'.$mydir.'/gettext');
I've fixed that in this instance, but of course unless the plugin is fixed, every time we update the plugin we'll have to make this change again.
The etcl site uses a plugin called event calendar 3 to display events in the content area or the What's New page, the content area of a specific event listing and in the right side-bar of the What's New page and the specific event listing page.
"Event Calendar 3" works with WP 1.5 - 2.7 and php 4
"Event Calendar 3 for php 53" works with WP 1.5 - 3.1 and maybe newer, and presumably php 5.3.
The production site is running php 4.2 and wp 2.6.1
The development site is running php 5.2 and wp 3.3.2
On the production site
"Event Calendar 3" seems to work. I can't see any errors, but I'm not sure if I'm turning on the debug messaging properly (i.e. by putting define('WP_DEBUG', true); into the wp-config file in the root directory).
On the dev site
When I try to activate "Event Calendar 3 for php 53", at the top of the plugins page in the admin interface:
- Notice: load_plugin_textdomain was called with an argument that is deprecated since version 2.7 with no alternative available. in /etcl/www/wordpress/wp-includes/functions.php on line 3553
- Notice: has_cap was called with an argument that is deprecated since version 2.0! Usage of user levels by plugins and themes is deprecated. Use roles and capabilities instead. in /etcl/www/wordpress/wp-includes/functions.php on line 3551
- Notice: Undefined index: page in /etcl/www/wordpress/wp-content/themes/etcl/functions.php on line 86
Similarly, on the What's New page on the site, I see:
In the right sidebar:
- Notice: Undefined variable: and_before in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/template-functions.php on line 405
At the top of the page:
- Notice: load_plugin_textdomain was called with an argument that is deprecated since version 2.7 with no alternative available. in /etcl/www/wordpress/wp-includes/functions.php on line 3553
- Notice: Undefined index: ec3_before in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 993
- Notice: Undefined variable: a in /etcl/www/wordpress/wp-content/plugins/event-calendar-3-for-php-53/eventcalendar3.php on line 995
The functionality seems to work, and the notices "go away" if I turn off the debug reporting (i.e. define('WP_DEBUG', false); in wp-config in the root folder).
I have no desire to start messing around with the code internal to some plugin, especially when the PHP and WP platform I'm running is not explicitly supported by the plug-in.
For example, I looked into the load_plugin_textdomain notice. The problem is supposed to be caused by invoking the method with only two arguments instead of three. There are three instances of that invocation in the codebase and all three of them have three arguments and each appears to have sensible values for those arguments, so I don't know what the problem is.
On the what's new page, the invocation of get_sidebar() throws the following error:
Fatal error: Call to undefined function ec3_get_events() in /etcl/www/wordpress/wp-content/themes/etcl/sidebar.php on line 28
I've temporarily commented out the call until I have a chance to debug the code in that file.
In the instance of the ETCL site using the ETCL theme in WP 3, the links in the navbar failed. They all just went to the page.php file. I spent most of the day trying to figure out how to get the links in the /nav.php file to work properly. I :
- investigated the settings in the .htaccess file but dismissed that as a likely solution because the default theme uses the same .htaccess file and it works perfectly.
- tried to figure out how the default theme works by deliberately introducing errors or renaming files, but I can't get that instance to break no matter what I do, so haven't learned much about what makes it work
- tried using various versions of the URL for the pages in the ETCL theme, and fiddled with the permalink settings for that theme too; the various forms of failure were not instructive to me.
I finally hit on the idea of comparing the settings in the wp-admin interface for the pages in the production 2.x instance and the dev 3.x instance. In the 3.x instance, I went to the wp-admin, chose Pages, selected the page I wanted and in the right column selected the Template from the drop-down list, then chose update.
For the staff, projects and contact pages I selected the template with the matching name.
For partnerships, there was no similarly named template, so I used the publications template, which is what the 2.x instance used. That displays the content correctly, so is presumably correct.
For "What's New" there is a similarly named template, but when I use that, no content is generated. In the 2.x instance, the What's New template does generate content, so I'll need to look at the files and compare them I guess.
I'm not sure why I had to manually assign those pages to the templates.
I dread trying to figure out why all the links to posts (the nav page links were all to "pages" which are a special class of posts) fail in the ETCL theme, yet work in the default theme.
Uni101 is finding Moodle overkill for their needs for blog-type software. Also, because a number of the students in their program are intermittent, there are issues with using the centralized netlink-based authentication service. Here's a summary of the specs:
Software that supports threaded discussions over the internet in a browser.
Three environments (e.g. blogs), one for each class.
Any student in the class may start a thread in the blog for that class.
Any student in the class may add to a thread in the blog for that class.
Ability to upload audio files or images would be nice, but not critical, and may want to restrict that to administrator.
Three types of users: administrators, moderators, students
Administrator had full privileges (blogs, posts, users). It would be nice if there were some way for the administrator to delete all postings in a blog prior to time X.
Moderator has ability to edit or delete posts. Admin will assign moderator privileges to specific users.
Student has ability to read posts, submit posts, but not to edit or delete posts.
User management to be handled within the application, not the UVic authentication service.
GUI for the student interface should err on the side of simplicity.
RSS feed is not a priority.
Convenience: a way to mass-mail (i.e. send to each of a list of email addresses) a post (available only to administrator)
The Malahat Review wants to create two pages with special offers for contributors (subscriptions and issues) which connect to the shopping basket as usual. Problem is how to allow a user coming from either of those pages to get back from the basket to either of those pages, but not allow anyone getting to the basket from the normal products pages to get to the special offer pages.
I use the reserved field names in the get array to submit a value from the special pages to the basket and then added javascript code on the basket page so that if it finds the right value in the right variable in the get array, it then displays buttons which link back to the special pages. Obviously this could be extended for other special navigation requests in the future.
Dept wanted a URL that was associated with the dept site and simpler than the actual conference url on the conferences site
(http://conferences.uvic.ca/index.php/WCPA/wcpa2012)
so I created a simple setup in
http://web.uvic.ca/philosophy/wcpa
to redirect to the conference site
I put in an index.htm file with a redirect.
I also created a .htaccess file to catch any other URLs within that folder and redirect them to the home page on the conference site
ErrorDocument 404 http://conferences.uvic.ca/index.php/WCPA/wcpa2012
There is about a half-second lag while the redirect occurs, but I don't think that is long enough to bother your users.
courses_taught.php had the following line:
$professor['kluge'][3] = array ("208, "331"); //jan-apr
It was missing a quotation mark. I corrected it to look like this:
$professor['kluge'][3] = array ("208", "331"); //jan-apr
I also tidied up extra spacing and stuff just to make the file easier
for me to read.
1) I modified the detailed information for a single poem
(vpn-single-record.php) so that the "more information" link for the poem
appears only for those poems that have at least one link and not for
those poems that no links. compare
http://web.uvic.ca/~vicpoet/?vpn_id=1096 and
http://web.uvic.ca/~vicpoet/?vpn_id=1130
Similarly for the "more information" link on an author.
2) AC's convention for data entry is that if there is more than one link for a poem or an author, each is delimited by a carriage return (e.g Eliza Cook). I've added code on the results page to
look for carriage returns in the links field and create a new link when
it finds one, rather than make all the lines one big link to the first URL. For example, see the information on Cook, Eliza at
http://web.uvic.ca/~vicpoet/?vpn_id=53
3) I've modified the vpn-search-results.php page so that if a poem has more than one author, only one instance of that poem appears in the listing in the search results page, e.g. Hidden Light.
I originally tried pruning out duplicates during the search procedure,
but the introduced a cascade of headaches. Instead, I decided to accept the results including duplicates and then prune any duplicates as they were being displayed and telling the user that's what I'm doing.
The result is that the total number of hits is still reported (e.g. 2 in the case of Hidden Light), and a message is appended saying the number of duplicate entries which are not being displayed (e.g. 1 in the case of Hidden Light). That's so that from the user's perspective the number of items in the listing don't inexplicably go out of sync with the reporting and navigation schemes. For example, if the query returned 12 hits, 2 of which were duplicates, the user would expect to see 10 hits and then 2 hits. If they got 10 and then 1, they'd be puzzled. My hope is that adding a note about hiding the duplicates will resolve the puzzle for them.
Suppressed display of the speech statistics in the XML ographies files when viewed in a web browser, at KT's request.
got multisite support enabled in wp 3.3.x
added inke front-end
added connection to inke database back-end
added etcl theme (it broke links the same way as it does in the dev etcl site). When I figure out a fix for the broken navigation problem, it presumably will work for both sites.
Did a couple of updates to the old Hispanital site on DR's instructions.
The mysterious numbers in Graves bibliographic data turn out to be references to the Higginson bibliography, and in the case of Riding, to the Wexler one. Duplication of idnos is caused by the fact that multiple analytic-level items may appear in the same m-level work. We can preserve these numbers in the data without worrying about displaying them, presumably, which obviates the need to explain them.
I've now finished the conversion of the existing markup to P5, after a fair amount of work converting the references file from its proprietary XML to TEI. One puzzle remains (see below).
This is the collection structure I've got so far:
<div type="abstract">s)<div> will become a front page on the site -- e.g. <div id="home" n="Home">, which would result in a menu entry "Home")
)<div type="diaryEntry">s; we may just handle any root level <div>, and assume that all attachments, enclosures etc. are contained within root level <div>s. In this case, we'll have to check the structure of the Graves files.)The puzzle: Bibliographic references have an "idno" field, and I'm not sure what kind of idno it is. For instance. "I, Claudius" has the idno "A42". It can't be a Cutter number, or it should begin with G.
These are not the unique ids used for linking <rs> elements in the text to references (which are stored in the id attribute); these are in addition to those. Also, these idnos are not unique; Graves's "Landscape" and Riding's "Letter on International Affairs" share the idno A36.
For the moment, I've preserved these as an <idno> element in the P5. This is the complete list of those idnos:
A101 A13 A18 A21c A23 A26 A29 A32 A33 A35 A35 [Wexler] A36 A37 A38 A39 A40 A41 A42 A43 A44 A45 A46 A47 A48 A49 A50 A58 A59 A6 A60 A7 A9 B22 B23 B24 B25 B26 B27 B29 B29.1 B30 C22 C24 C291 C291.2 C291.3 C291.6 C291.7 C292 C292.1 C292.2 C292.3 C293 C293.1 C293.2 C294
Went in to debug some things on the VPN site and noticed that the home page was taking forever to load (and in fact I think I ended up getting some cached version of the page).
Web server serving static pages no problem
phpmyadmin communicating with db no problem
Therefore problem has to be something to do with the wordpress code trying to establish a connection with the db.
Created a test.php file which does nothing other than try to connect to the DB. If it tries to connect to any DB running on the hcmc's mysql server, it times out and generates an error. If it tries to connect to a DB running on uvic's mysql server, it's fine. So, there's definitely a problem with any page on web.uvic.ca trying to connect to a db on the hcmc server. Put in request to sysadmins to check the Access Control List on the hcmc db server.
ER sent me copy of page with order forms on it for review.
Functionality seems fine with one exception: if user selects something, goes to shopping cart page, then returns to Malahat ordering page, the only way to get to the shopping cart page again is to buy an additional item and then in the shopping cart page delete the extra item. Page would probably have to be changed to php to allow me to grab the session id and display a "go to shopping cart" button.
Bunch of standards violations (elements not closed, uppercase element names, ampersands not escaped, missing quotation marks around attribute values). In anticipation of request, I rewrote page so that is validates against xhtml 1.1.
Also added bit of javascript and html div elements so that 3 order forms are hidden by default and the appropriate one is shown when the user clicks on a link on the page.
Added the Spanish 100B tests for 2005 to the website (received from NM and built with my special source files). Presumably 2011 will be coming soon.
My P4 to P5 conversion is now working, and producing valid output on abstracts, entries, and the project metadata file. I may do more work on this, but I'll be moving on to the -ography stuff next.
Finally figured out how to successfully implement a data range search.
In plugins/vpn-search/form_advanced.php page, I added the two elements to the search form.
In plugins/vpn-search/vpn-search.php, I modified the getAdvancedConditons method (which constructs the conditions for the WHERE clause in the SQL query) by adding special cases to deal with table.field values of poems.po_date and poems.po_date2. There is no po_date2 field in the poems table, so the special case code inserts "po_date" instead of "po_date2". The reason I'm using a bogus table.field identifier is explained below
In plugins/vpn-search/classes/VPNFormBuilder.php, the fieldMap array uses a table.field name as the key and the id of the element in the GUI as the value. Code assumes a one-to-one relationship between GUI elements and table.field specifier. I needed to add two new key-value pairs, but the two new elements both are associated with the same table.field. I can't use the same key for more than one value, so I created a bogus table.field value (poems.po_date2) and then special-cased that value in the code in vpn-search.
At the moment, the date-range-start and date-range-end fields accept four digit years, and if crazy values are inserted, no checking is done and the user just gets 0 hits.
Added code to the scraper php file so it:
- displays the status of the processing of each record
- generates a table of contents file with the name of each htm file containing a CircleMagic player and link to it, and the name of each record in the DevMS Wikibook and a link to that record's URL, and includes a link to that TofC page at the end of the report log on the php page.
Wrote a readme.txt file which details
- the required folders and files
- the structure of the XML needed for circleMagic
- naming conventions for the files generated by the scraper
- how the 2 template files work
- notes on wikibooks API and GUI for testing
Added a bunch of inline documentation to the scraper.php file.
Ran it on the full DevMS wikibook and generated 241 x 2 - 482 files. CC reviewed and approved.
CC reviewed
Made significant progress today writing XSLT to convert the rather screwed-up P4 encoding we currently have into P5. Lots of time spent on a few small issues, such as converting <handList> and contents, whose more obscure attributes don't map easily onto the P5 <handNote>. I now have valid working output from my sample abstract and entry files. However, there is more I'd like to do in terms of tweaking attribute values such as @type on <div>, and @xml:ids. I also want to try to pull out some key information (dates etc.) which is currently available in the transcription and/or in attributes such as @n or @id, and record it formally in the headers.
Following that, I'll need to convert the project metadata file, and then the dreaded ography stuff, which is not TEI at all.
Tweaked the XSLT to handle situations in which an <rs> tag was linked through @ref to multiple <person> ids. Set up a new catalogue file and ographies.xml file for the Harper part of the project, and went through setting up transformation scenarios with KT on her system. Not sure yet whether we should be version-controlling the mvp.xpr file in which the scenarios may be stored; each of us is likely to do different things in that file, so it may be simpler just to set up new scenarios on any system which is being used for editing.
Various solutions to 7-source constraint imposed by CirclMagic
<!-- kludge that generates solid first ring (which provides no information) and second ring of N coloured wedges with no grey ring outside -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
</detail>
<detail>
<id frequency="2">Cultures18-sub1-1</id>
<id frequency="2">Cultures18-sub1-2</id>
<id frequency="2">Cultures18-sub1-3</id>
<id frequency="2">Cultures18-sub1-4</id>
<id frequency="2">Cultures18-sub1-5</id>
<id frequency="2">Cultures18-sub1-6</id>
<id frequency="2">Cultures18-sub1-7</id>
<id frequency="2">Cultures18-sub1-8</id>
<id frequency="2">Cultures18-sub1-9</id>
</detail>
<detail>
</detail>
</details>
</source>
Above model could obviously be extended to include another ring for Major/Minor. We could use that first ring to indicate staff or public, then within each of those categories have a wedge for each author and the third ring for major/minor for each author.
One problem with any approach that uses the innermost ring as a placeholder is that if the user clicks on that ring, the rest of the circle is greyed out, and that effect makes more sense if the innermost ring is authors, not some grouping of authors.
The xml output that my code generates for the The Devonshire Manuscript page on the wiki caused the CircleMagic display to throw an error. Took a couple of hours to figure out the problem.
1) Discovered that if you have more than 7 source elements in the XML file, MagicCircle generates an error message rather than displays the data. The absolute and relative size of the counts in each source element don't seem to matter. I tested to see if there is a similar limit on the number of detail elements, and stopped testing at 18 details within one source
Here's the structure for a source which kind of solves the problem, by using one source and N detail elements in that source resulting in the innermost ring being all one colour and the second ring divided into n wedges. (The empty third detail element suppresses the display of the black outer ring.):
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
</detail>
<detail>
<id frequency="2">Cultures18-sub1-1</id>
<id frequency="2">Cultures18-sub1-2</id>
<id frequency="2">Cultures18-sub1-3</id>
<id frequency="2">Cultures18-sub1-4</id>
<id frequency="2">Cultures18-sub1-5</id>
<id frequency="2">Cultures18-sub1-6</id>
<id frequency="2">Cultures18-sub1-7</id>
<id frequency="2">Cultures18-sub1-8</id>
<id frequency="2">Cultures18-sub1-9</id>
</detail>
<detail>
</detail>
</details>
</source>
2) Did various test of xml structures to see what would be output, with following results:
<!-- generates a "problem with data" error -->
<source>
<id frequency="18">Cultures18</id>
</source>
<!-- generates a ring of coloured wedges too big to fit into the viewport -->
<source>
<id frequency="18">Cultures18</id>
<details>
</details>
</source>
<!-- generates ring of coloured wedges, what you want for 1-level detail with 7 or fewer sources -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
</detail>
</details>
</source>
<!-- generates ring of coloured wedges with black.dark grey ring outside -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
<id frequency="9">Cultures18-sub1</id>
<id frequency="9">Cultures18-sub2</id>
</detail>
</details>
</source>
<!-- generates two rings of coloured wedges -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
<id frequency="9">Cultures18-sub1-1</id>
<id frequency="9">Cultures18-sub1-2</id>
</detail>
<detail>
</detail>
</details>
</source>
<!-- generates two rings of coloured wedges with black/dark grey ring outside -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
<id frequency="9">Cultures18-sub1-1</id>
<id frequency="9">Cultures18-sub1-2</id>
</detail>
<detail>
<id frequency="6">Cultures18-sub2-1</id>
<id frequency="6">Cultures18-sub2-2</id>
<id frequency="6">Cultures18-sub2-3</id>
</detail>
</details>
</source>
<!-- generates three rings of coloured wedges -->
<source>
<id frequency="18">Cultures18</id>
<details>
<detail>
<id frequency="9">Cultures18-sub1-1</id>
<id frequency="9">Cultures18-sub1-2</id>
</detail>
<detail>
<id frequency="6">Cultures18-sub2-1</id>
<id frequency="6">Cultures18-sub2-2</id>
<id frequency="6">Cultures18-sub2-3</id>
</detail>
<detail>
</detail>
</details>
</source>
Reviewed the situation with the ETCL site and the fact that none of the links work. Some generate a 404 error, others display a "What's New" page with banner and right column, but no page-specific content. Compared the production site UI and wp-admin settings with my dev site. Did a bunch of playing around with URLs and fiddling with configuration settings in the wp-admin in the dev site. Made no changes at all to the production site.
The problem seems to be an incompatibility between the WP3.1 environment (specifically the way links are handled) and code somewhere in the ETCL theme.
I will next compare the ETCL theme against the twentyten theme in the dev environment as the twentyten theme supports navigation that the ETCL theme doesn't.
I'm still not sure whether I should start with the ETCL theme and modify the php in it as needed to work with the WP3.1 API for links, (which is my preference) or whether I should start a generic theme and modify it to produce the look and feel similar to the current ETCL (except of course that the links would work).
I've added new functionality to the stylesheet that builds the serOgraphies.xml file. As part of the information it gathers on each character, it also pulls out the beginning of each speech (<said>), and tells you what the nearest <rs> to that speech is. In other words, it calculates which epithet is most closely associated with each speech. This involved writing a couple of useful functions (hcmc:getTextOffsetBetweenTags and hcmc:getNearestRsTag) which will also be useful with the Map of London.
It's currently set to a distance limit of 250 characters (meaning letters/digits/glyphs, not literary characters), so that if there is no <rs> within 250 characters of the <said>, no epithet is returned. That distance can be changed easily in the stylesheet.
Finished process of processing files into tab delimited text files for upload into the mySQL DB, following process in the documents HowTo/HowToProcessColonistFiles.txt and HowTo/sql_for_load_data_file.txt files.
Modified HowToProcess document a bit to capture new conventions for encoding cemetary plot identifiers.
Modified sql_for_load_data_file as it had the field names in the wrong order (cemetary followed transcript rather than preceded it in the list of fields)
Uploaded data for 1927, 1928, 1929, 1930, 1931, 1932 into the database.
Reorganized folders containing data files and synchronized the files on the server and the files on my Mac so I have identical copies of the data files and the website on both machines.
Met with ER to go over state of the ecommerce testing for their site. Settled on the best kind of solution (i.e. Beanstream's inventory and shopping cart system addressed by pages on the Malahat site, rather than everything on the beanstream server (i.e. a complete custom-built store) or everything on the malahat server (again entails custom-built store and then code to transact the actual financial details).
At the meeting, still having problems with the hash-value validation with the shopping cart page. Eventually solved that by emailing RE who put me onto someone in the bookstore (they'd written their own custom store) who put me onto a BeanStream guy. The Beanstream guy was good and within half an hour problem was solved. There are two checkboxes in the admin interface "require hash value" and "include hash value". The first must be not checked and the second checked for use with the shopping cart. My guess is that if the site is being addressed directly from pages on the client's server (i.e. with code that injects the correct hashvalue in the correct place in the submission), then both those have to be checked - but I'm not sure about that.
Today I've done a lot of regex work on the TPS files to do the following:
<persName> tags to <rs>.serOgraphies.xml for <rs> and <placeName> tags.I've also beefed up the output so that the stats for speeches are now properly encoded and identified, and I've supplied a CSS file which makes it possible to read the stats in a browser from the serOgraphies.xml file. Also helped KT with a bit of troubleshooting with a file versioning/rollback issue.
I've now added placename handling to the -ography generation code. In the process, I discovered that the same identifiers have been used for people and places in a number of cases. These will be disambiguated by KT, but in the meantime, I've added traps for them so that the XML file which is generated does not have id collisions. The -ography file is now generated from itself, and can preserve any descriptive data in e.g. <p> or <desc> tags which already exist in the file, while replacing the counts etc.
I've sent detailed instructions to KT on how to use search-and-replace to transition to the use of <rs> instead of persName, and to a single -ography file from the separate people and places files maintained previously.
Now I'm working on counting speeches and lengths of speeches for each character.
I've written some simple XSLT to compile a file called serOgraphies.xml from the three input files KT says are basically ready. The entries look like this:
<item xml:id="Charles"> <rs n="1">Charles</rs> <rs n="3">Charles Gould</rs> <rs n="6">Don Carlos</rs> <rs n="2">Don Carlos Gould</rs> <rs n="1">Gould</rs> <rs n="4">Señor Administrador</rs> <rs n="2">Señor Administrador of the San Tomé Mine</rs> <rs n="1">their Señor Administrador</rs> </item>
The @n values are the counts of instances of that particular epithet, so "Charles" occurs once, "Charles Gould" occurs three times, and so on.
I found and fixed a few encoding errors and oddities in the transcription files at the same time.
This is generated from <persName> tags, but it's simple to change to <rs> tags, add <event>s, etc. It's likely that tagging in the text will shift to <rs> from <persName>, so that e.g. non-human characters such as animals can be accommodated.
Based on my meeting notes and some subsequent thinking, I've created a detailed plan for AT, for the Tarr markup, and sent it to him and KT.
Meeting with AT to discuss markup for Tarr. Made some preliminary decisions, which I'll summarize in an email tomorrow.
AT will be starting work on Tarr, so I've added him to the SVN users, and reorganized the repo so Nostromo and Tarr get different folders. I've written a more elaborate set of SVN instructions, and when AT has Oxygen set up on his laptop, he'll spend some time working alongside KT to get familiar with the workflow.
...on MK's instructions.
On MK's instructions.
LSPW and I have been trying to track the history of Boréal and how it relates to the Grad colloquium. This is what we learned:
LSPW will create a new page in current_students/graduate which has an accordion with one section for each year; the introductory material for each year can be copy/pasted from the index.php files, and links to the articles listed.
Got a pic of the speaker from KE, and added it to the site; worked fine on the www-dev location, but the www location kept showing the old page until I deleted the file, loaded the page for a 404, then uploaded again. Strange.
... on KE's instructions.
At PAB's request. And some preliminary discussion of moving it to Cascade.
Final tweaks received from department, and nav plan submitted to JS.
Long discussion with EDR about possible approaches to encoding rhythm. I think we should use something like this:
<metDecl xml:id="fr_ip" type="met" pattern="AAT:AAT\|AAT:AATA"> <metSym value="T">syllabe tonique</metSym> <metSym value="A">syllabe atone</metSym> <metSym value="|">césure</metSym> <metSym value=":">pause métrique</metSym> </metDecl>
and then tie <l> tags to the specific <metDecl> using the @met they match. This would make for nice stand-off markup. We should probably actually replace the pipe with some other character that doesn't need escaping, for convenience. But looking at the Guidelines, you can't actually point at a metDecl; you have to reiterate the pattern in the @met attribute. I've already found and reported one bug in the source for the French example of <metDecl>, but I think bit of the GL needs a more serious look.
Ok.
To get this bit to work your user has to have access to the adminstration / account settings / order settings area.
You must
1) provide the URLs for working pages in each of the Approval Redirect: and Decline Redirect: text boxes. I think those URLs can be to either pages hosted within the beanstream account or on your server - I've only tested the former so far.
2) uncheck the Require hash validation checkbox
3) check the Include hash validation checkbox
4) click the update button at the bottom of the page
I've created a simple shopping cart, but when I try to use it to buy, I get a "hashvalue missing" error. I had a similar problem with a form hosted on their service buy created by me and solved it by including a hashcode in the submission string as the documentation suggested.
I don't see how I'm going to be able to inject a hashcode into the submission string produced by one of the forms on their shopping cart, and there's no mention of handling hashcodes in the shopping card documentation, so I've written to RE to find out what to do.
I also created a simple page on my account on the UVic server which invokes the shopping cart and passes in the item I want to buy. That works fine, but if I then go on to try and actually buy the item, I get the same error as detailed above.
The issue with the simple form is that you'll have to write a lot of code to deal with various kinds of situations (errors, user changing their mind about items or quantities, etc.). I'm hoping the cart takes care of some of those hassles. First test is a cart using pages hosted on their server, then I'll try a cart with as many of the pages as possible (likely the product pages) on the Malahat site.
First, you've got to get the finance people to create a test account for you with the beanstream service, if you haven't got that set up already as described in the post on how to get going with a simple form.
Robert Elves has been my contact.
That account's permissions have to be set so that it has full access to the configuration / shopping cart and configuration/inventory areas.
I suspect strongly that you'll also want access to the configuration / shipping area too, but I haven't got far enough to know that for sure yet.
The procedure for the Simple Shopping Cart is described here: https://beanstream-manuals.pbworks.com/f/BEAN_Starter_Cart.pdf
I found it pretty straightforward to implement, other than I'm not sure how to rearrange the order in which the categories appear, and I'm not sure how to handle the various shipping charges the Malahat charges (e.g. the first item in any category attracts a higher price than subsequent items in the same category).
Spent the morning turning the navigation plan for PAS into a spreadsheet; sent it to the team for comments before submitting it.
Met with folks from the dept, and worked through their spreadsheet. I'll turn the results into another spreadsheet on Monday, and we'll get it submitted ASAP.
Hérodiade Scène took a long time because of its speaker headings and line indents, but most of the rest were quite rapid. 47 out of 77 poems have now been processed into XML and HTML.
Went over first draft prepared by Judy yesterday and revised draft today. Yesterday removed unneeded primary sub items to conform with outlines we had from BB.
Today tidied up minor presentation issues.
She submitted to BB for review, with one question on relationship between two instances of content to do with student awards and financial aid.
When we hear back from BB, we'll submit formally to communications.
Here's how to add a static page to a site hosted in conferences.uvic.ca:
Login in conference manager
Under General Management choose System Plugins
In Plugin Management choose Generic Plugins
In Generic Plugins find Static Pages Plugin and click Edit/Add content
Click on Add New Page or Edit beside existing page
Edit content
Click the Save button
To link to that page, the URL is:
http://conferences.uvic.ca/index.php/va2012/index/pages/view/PATHFORFILE
where PATHFORFILE is specified in the path textfield in the Static pages plugin (I suspect it's really just a file name, so I'd use no spaces or punctuation in it).
First, you've got to get the finance people to create a test account for you with the beanstream service. Robert Elves has been my contact.
That account's permissions have to be set so that it has full access to the configuration / secure web space area.
You need to
The procedure for the Custom Hosted Form is described here:
https://beanstreamsupport.pbworks.com/w/page/26445713/Custom%20Hosted%20Form
The Custom Hosted Form page says "Navigate to configuration > secure webspace in the Beanstream member area and upload your files to the Beanstream server." If your account does not have permission to access that area, you'll get an error message.
You'll need to read through the API Integration pdf document at https://beanstream-manuals.pbworks.com/f/BEAN_API_Integration.pdf
I managed to succeed with the following fields in my form:
merchant_id
hashValue
errorPage
declinedPage
approvedPage
trnOrderNumber
trnAmount
trnCardOwner
trnCardNumber
trnCardNumber
trnExpMonth
trnExpYear
trnCardCvd
ordName
ordEmailAddress
ordPhoneNumber
ordAddress1
ordCity
ordProvince
ordPostalCode
ordCountry
you can see your merchant id on the home page when you log in to your beanstream account
hashvalue is discussed in the next post - it is required and is not trivial to implement
card values to use for testing are provided in the API Integration PDF file
details on all the other fields and legal values are provided in the API Integration pdf file mentioned above
Next post is on how to include a hash code (it's protected).
Following a discussion on TEI-L, and more discussion with KT, it looks as though we should move towards the following approach:
<rs> should be used instead of <persName> to mark up epithets in the text. persName is only appropriate for a subset of references to people (those which are actually names), while <rs> is generic and can thus be used to simplify the markup.<person> elements, not to their constituent epithets.
<person xml:id="Fred">
<note type="epithets">
<rs xml:id="Fred_ti">the idiot</rs>
[...]
</note>
</person>
with the <note> element populated by rs elements, one for each distinct value string found in the text, with @xml:id attributes generated appropriately.
<said> element found (which initially would have been given @who="pers.xml#Fred", modify the @who attribute to point to the specific epithet in force at that point in the text. (This methodology doesn't specify how the decision as to which epithet is in force might be made; KT takes that decision.)<linkGrp> and constituent <link> elements.<linkGrp> elements might be re-expressed through XSLT as <category> hierarchies in a <taxonomy> element in the header, for the sake of clarity and portability.However, for the moment, since the serial markup is nearly finished, KT will continue with the current methodology to complete it. Then we will auto-generate a new personography, and compare it with the one she's been creating as she goes, as a sort of check on accuracy and consistency. Work on the Harper edition may then proceed based on the steps above.
Following a discussion with KT this morning, I've made some changes to the schema to enable the encoding to capture some of the relationships we talked about. Here's a summary:
-----------------------
1. Specifying the people in a personGrp:
We need to be able to specify the people who comprise a personGrp element, so that you can note where they're referred to as a group, but also disentangle the group into component members if required during processing. Let's say you have a <personGrp> like this:
<personGrp xml:id="Dep">
<!--Fuentes and Gamacho-->
<persName xml:id="Dep_d">deputies</persName>
</personGrp>
and the persons in the group are defined elsewhere:
<person xml:id="Fuentes">
[...]
</person>
<person xml:id="Gamacho">
[...]
</person>
We can specify the members of the group using the @corresp attribute on <personGrp>, like this:
<personGrp xml:id="Dep" corresp="#Fuentes #Gamacho">
Each xml:id is prefixed with "#" and separated by a space.
-----------------------
2. Grouping epithets
There are many epithets for each character. Some of these epithets are similar, and there are natural groups of them (for instance: epithets for Nostromo that begin with the actual word "Nostromo", or epithets which are pejorative). The number of such groupings is completely unpredictable and they overlap (so there may be epithets for Nostromo which both begin with "Nostromo" and are pejorative, so they would be members of both groups).
We can handle this using a <linkGrp> element inside <person>. So, for a simplified Monygham:
<person xml:id="Monygham">
<persName xml:id="Monygham_dr">doctor</persName>
<persName xml:id="Monygham_DR">Doctor</persName>
<persName xml:id="Monygham_DM">Dr. Monygham</persName>
<persName xml:id="Monygham_sd">scoundrelly doctor</persName>
<persName xml:id="Monygham_road">rogue of a doctor</persName>
<persName xml:id="Monygham_sir">sir</persName>
</person>
where we have some epithets which relate to the word "doctor", and some which are pejorative (but which are also "doctory"), we could add this to <person>:
<person xml:id="Monygham">
<linkGrp>
<link n="Epithets for Monygham using the title 'doctor'"
target="#Monygham_dr" #Monygham_DR #Monygham_DM"/>
<link n="Epithets for Monygham which are pejorative"
target="#Monygham_sd Monygham_road"/>
</linkGrp>
[...]
</person>
The @n attribute on <link> can be used to provide a brief explanation of why that particular set of epithets forms a set.
-------------------------
3. Encoding errors in the original text
There are errors in chapter headings in the series edition. We can simultaneously record and correct these using <choice>, <sic> and <corr>. For instance:
<head>CHAPTER III. (continued)</head>
This should be Chapter IV, not III. So:
<head>CHAPTER <choice><sic>III</sic><corr>IV</corr></choice>. (continued)</head>
To be more explicit:
<choice>
<sic>III</sic> <!-- The original text which is wrong. -->
<corr>IV</corr> <!-- The correction. -->
</choice>
-----------------------
4. Linking between persons in one personography and the other
There is one case where a person's name has changed between the editions. We can encode the correspondence with a @corresp attribute on <person>:
<person xml:id="Fred" corresp="otherPersonography.xml#Joe">
[...]
</person>
-----------------------
I think that covers what we discussed today, except that I will also post a message to TEI-L asking if anyone else has done similar work with epithets and referring strings. I'll also ask about our usage of <persName>; The more I look at the epithets, the less most of them look like <persName>s and the more I think they should be <rs>, but <rs> is not available in <person>.
I've started writing and testing code for building JSON blocks which capture the "density" of occurrence of particular appellations throughout a text. I have some basic working code which is able to count the frequency of reference to a particular character in each block of X characters in the text, but I'm encountering a lot of markup errors which are making the output difficult to verify. I'm reporting errors where I find them, but I still need to check with KT tomorrow to find out which file(s) are the current working files.
I think we need to write some schematron she can use to check the form of attributes such as @ref.
Set up a new Subversion repo for MVP, along with permissions for users.
Sent to EG-W for comments.
LB needs to add the logo for a sponsoring organization (SSRHC) to the footer of their site on the conferences.uvic.ca service. I couldn't figure out a safe way of uploading an image (all by itself). (I thought of using the homepage image uploader to put the file up there and then figure out what it's URL must be, but it appears the conferences CMS renames the file and would overwrite the existing real main image on the home page).
So I put the image in a folder on the GRS dept site, then edited the html of the footer element to include an img element linking to that image. For some reason change is visible within the conference manager interface, but doesn't show up on the live site - not sure why, maybe a lag due to some kind of server caching or something.
...on MK's instructions.
Got another couple of visualizations basically working, and I now have about twelve distinct json outputs generated by XSLT. There's a lot more to learn about D3, though; I'll need to sit down and read through the API if I'm going to be able to customize the existing visualizations in any useful way.
Met with CC
Summary:
Confirmed procedure first outlined here and detailed below.
1) Get ID of all (main) pages whose title begins with The Devonshire Manuscript
2) For each page, get the revisions
3) Save resulting XML to file
4) Process resulting XML with XSLT to produce XML output suitable for CircleMagic.
Extend that same procedure to Talk pages whose title begins with The Devonshire Manuscript
Likely plan: implement in php, use curl to get files, Mar
Later we'll worry about aggregating raw XML and/or XML for CircleMagic.
Details:
Query to get the ID of all pages whose title begins with The Devonshire Manuscript
returns
<api>
<query>
<allpages>
<p pageid="259759" ns="0" title="The Devonshire Manuscript" />
<p pageid="264110" ns="0" title="The Devonshire Manuscript/94r-96r" />
<p pageid="264051" ns="0" title="The Devonshire Manuscript/A my herte a what eilith the" />
...
<p pageid="262594" ns="0" title="The Devonshire Manuscript/ys yt possyble" />
<p pageid="262460" ns="0" title="The Devonshire Manuscript /Take hede be tyme leste ye be spyede" />
</allpages>
</query>
</api>
for each page, run query specifying the fields ids, flags, timestamp, user, userid, size, comment
to get revisions for that page, something like this example for page 259759:
http://en.wikibooks.org/w/api.php?action=query&prop=revisions&format=xml&rvprop=ids%7Cflags%7Ctimestamp%7Cuser%7Cuserid%7Csize%7Ccomment&rvlimit=10&pageids=259759
returns
<?xml version="1.0"?>
<api>
<query>
<pages>
<page pageid="259759" ns="0" title="The Devonshire Manuscript">
<revisions>
<rev revid="2271272" parentid="2266406" minor="" user="Cultures4" userid="505038" timestamp="2012-02-21T23:42:20Z" size="29114" comment="Added colon." />
<rev revid="2266406" parentid="2266057" user="Cultures92" userid="493905" timestamp="2012-02-16T17:14:06Z" size="29113" comment="added a space for the encoded material introduction" />
<rev revid="2266057" parentid="2266056" user="Cultures92" userid="493905" timestamp="2012-02-15T23:06:34Z" size="29028" comment="" />
...
<rev revid="2208495" parentid="2208491" minor="" user="Cultures92" userid="493905" timestamp="2011-11-09T19:49:51Z" size="523" comment="inserted line breaks; added heading;added an introduction page" />
<rev revid="2208491" parentid="2208489" minor="" user="Cultures92" userid="493905" timestamp="2011-11-09T19:45:55Z" size="393" comment="" />
<rev revid="2208489" parentid="0" user="Cultures92" userid="493905" timestamp="2011-11-09T19:43:18Z" size="403" comment="inserted the TOC and status (0%)" />
</revisions>
</page>
</pages>
</query>
<limits revisions="500" />
</api>
Apply same procedure to all the page pages in the TALK namespace whose title begins with The Devonshire Manuscript
Query to get list of talk pages for devonshire manuscript
returns
<?xml version="1.0"?>
<api>
<limits allpages="500" />
<query>
<allpages>
<p pageid="262865" ns="1" title="Talk:The Devonshire Manuscript" />
<p pageid="263839" ns="1" title="Talk:The Devonshire Manuscript/Biographies" />
<p pageid="263769" ns="1" title="Talk:The Devonshire Manuscript/My lute awake performe the last labor" />
<p pageid="260967" ns="1" title="Talk:The Devonshire Manuscript/To wette yowr Iye withouten teare" />
<p pageid="263424" ns="1" title="Talk:The Devonshire Manuscript/Wyly no dought ye be a wry" />
<p pageid="262996" ns="1" title="Talk:The Devonshire Manuscript/Yff reason govern fantasye" />
<p pageid="264109" ns="1" title="Talk:The Devonshire Manuscript/ffortyn ells" />
<p pageid="262992" ns="1" title="Talk:The Devonshire Manuscript/what nedythe lyff when I requyer" />
</allpages>
</query>
</api>
query to get revisions to one of those pages e.g. page 262865
returns
<?xml version="1.0"?>
<api>
<query>
<pages>
<page pageid="262865" ns="1" title="Talk:The Devonshire Manuscript">
<revisions>
<rev revid="2246975" parentid="2246343" user="Cultures92" userid="493905" timestamp="2012-01-05T20:29:59Z" size="2380" comment="" />
<rev revid="2246343" parentid="2246341" minor="" user="Panic2k4" userid="2865" timestamp="2012-01-03T22:41:02Z" size="1780" comment="" />
<rev revid="2246341" parentid="2246336" user="Panic2k4" userid="2865" timestamp="2012-01-03T22:30:47Z" size="1742" comment="" />
<rev revid="2246336" parentid="2235673" user="Cultures92" userid="493905" timestamp="2012-01-03T22:11:20Z" size="1179" comment="should we link or import? which is best Wikibooks practice?" />
<rev revid="2235673" parentid="2235654" user="Jomegat" userid="12605" timestamp="2011-12-13T20:28:51Z" size="610" comment="Import from WP" />
<rev revid="2235654" parentid="0" user="Cultures92" userid="493905" timestamp="2011-12-13T20:11:23Z" size="230" comment="Created page with "Shall we discuss requesting an import of our contributor biographies from Wikipedia? ~~~~"" />
</revisions>
</page>
</pages>
</query>
</api>
Last night and today I continued work on the JSON-generating XSLT, and I now have it producing JSON files for the number of speeches and the length of speeches for each version of the text. I'm able to use the Pack example code, somewhat modified, to produce a visualization of the number of speeches, and I'm looking at other visualizations to handle the length of speeches; probably a kind of composite bar chart like the Crimea stacked bar example. That uses CSV rather than JSON, though.
I found some issues with the XML encoding, which I've sent off to KT. I also think it's time we moved to a Subversion repo for the XML and the code.
I've got as far as Hommage Toute Aurore, with the exception of herodiade_scene.txt, which is long and complicated and will probably have to be done manually. I'll upload these files after the editors have finished their current session.
Meeting today with JS, SR and KT, at which we mapped out three possible visualization sets we'd like to target. Then I started working on XSLT to generate JSON, and got a preliminary visualization of the use of epithets showing based on the "Pack" example from D3. This looks like a fruitful way to proceed.
Fixed two bugs in the Graves code: one relating to display of log entries (competing XSLT templates -- fixed by making one of them more specific), and one in the display of the search page (tables had a width of 200% for some reason that's not apparent to me, causing select elements to extend past the border of their ancestor fieldsets).
Processed all the Chansons Bas files into XML and HTML. Some had to be renamed (apostrophes and spaces in file names), and all had to be processed without their headings, then have their headings added back after processing.
Worked on a basic introduction/rationale/project plan for an update/rewrite of the Graves Diary project. Results to EGW for comments; when I get them back, I'll go ahead and write a full proposal for the committee.
With details from AC, I completed the proposal, bundled it up and sent it to SA for submission to the committee.
Added new features to the web interface, including editing an existing reading, cloning an existing reading, and display of multiple link elements simultaneously.
More work on the project plan, to incorporate an idea from last night's discussions with SA, whereby we avoid the necessity for all the rather fragile trigger mechanisms on the relational db in the early stages; also integrated SVN into the equation, updated the diagrams, and completed the proposal with the exception of bits which need AC's direct input. I've now sent them to her for completion.
Met with EG-H to discuss the next phase of the project, including collaboration with Trinity and a proposal for the committee. I'll write the proposal in the next few days.
AC reported a problem with poems assigned to one author in the db. I went back to a previous backup, and discovered that there were two records for the same author in the db; one of them had many poems assigned to him, and someone deleted him, so those poems were then without authors. Listed them all, and also sent a separate list of all authorless poems to AC, in case she wants to look at them.
Created a detailed plan for VPN, which will be attached to the proposal and will help to calculate the hours required. Sent to SA for comments.
Made some changes to the site at MK's request, and queried a couple of issues I noticed.
EDIT: Fixed 2012-02-21.
Looking at the Graves Diary project to plan the next phase and a cooperative venture with Trinity Dublin, noticed a couple of bugs:
Met with SA and AC to plan a project proposal for the committee. Issues fall into three categories: minor tweaks we can probably do right now, major updates to the db and WordPress sites, and the transition to an XML application. I'll write the full proposal up in the next few days, and it should be able to go to the next committee meeting.
Reworked the document from last August, to change all references to the shared account on web.uvic.ca to a project account on home1t (which involved re-doing all the screenshots). Sent the PDF out to the team.
We're now going to be transcribing and checking against the 1914 edition, not the 1899, although most of our 1899 transcriptions will still be useful.
Gave a brief run-through of image linking and uploading to the VPN team; since the image location etc. has changed, I have to rework the original documentation asap (on schedule for Monday). Also discovered that users were not able to log into tapor boxes, so got sysadmin to add them as users (they were already correctly in the vicpoems group). Must test logons early next week, somehow.
After much back-and-forth and comparison of editions, the following decisions were made:
Spent a lot of time on this today, including enhancing my script a bit.
Part of a large procedure outlined here.
Assumes you have modified the configuration set for the site as described here.
The folder and file structure appear as follows. These are created, named and configured in the conventional way except where explicitly noted otherwise.
For a primary section containing no subprimaries and no secondaries:
Nothing unconventional
Primary with a subprimary with no secondaries:
Again, nothing unconventional.
Primary with one subprimary with no secondaries and one subprimary with secondaries
Once again, nothing unusual.
The odd case is when you want in your GUI for the user to click on the Primary item and to see secondary items for that primary item, but not to see a subprimary item that contains those secondary items. Here's an example of a primary with one subprimary with no secondaries, one subprimary with secondaries and a "ghost" subprimary to contain secondaries of the primary
primary3sub3 is the folder I'm using to hold the secondary items for the parent primary1 folder, so that those secondary items display in the GUI when the user clicks on the Primary 1 item in the GUI. As you can see, the only oddity in the structure of that primary3sub3 bit is the lack of an index file in the primary3sub3 folder (explained below). Here's how such a folder has to be specially treated:
So, there are only a couple of very small modifications you need to make to standard practice for creating folders and files to accommodate the primary sub structure.
If you want a primary section that has no subprimaries, but a number of secondaries of that primary, then you'd have a structure like the following (using the conventions mentioned just above), and you'd set the custom metadata of primary4placeholder to "ignore" :
Part of a procedure outlined here.
Log into Cascade cms.uvic.ca ; the dashboard is displayed
In the dashboard:
Choose site from dropdown at top of cascade site.
To modify the configuration set for an entire site to support primary sub menus:
The site configurations are now set. Choose the Home item in the blue Cascade menu bar. Next you have to set up your folders to support a site which contains primary sub sections, detailed here
Finally figured out how to implement a site using primary-sub menu structure in Cascade with help of DaveW at drop-in session. In Summary:
1) You have to change the configuration set for the site
2) You have to have a primary folder containing an index file for each section of the site - as usual. What you do within that primary folder depends on the effect you want. Only the last of these four is requires special treatment.
- no subprimary sections and no secondary sections (i.e. a one-page primary section)
- a subprimary section that displays no secondary sections in the GUI
- a subprimary section that contain secondary sections
- a primary section that displays secondary items in the GUI, but does not display a subprimary 'containing' those secondary items in the GUI, with or without other subprimary sections that do display in the GUI
There are separate posts on detailed how-tos coming on how to
1) modify the site configuration
2) create a primary section various combinations of subprimaries and secondaries
Got sysadmin to reconfigure users in the vicpoems group on home1t so it has the current set of editors in it. AC confirmed she would prefer to use an HCMC server location than a secondary netlink on web.uvic.ca so she can avoid having to share credentials for the storage of images. Changed the local_classes.php files in dev and live so that they point to vicpoems on home1t. This is in preparation for a meeting on Friday at which RAs will be shown how to upload and link images.
Fixed a bug in filename of output HTML when input was XML as opposed to TXT. Added six more poems to the set, for AA to work on.
At the request of AA, I've added a new feature to the web interface used for generating readings. The user can now select two or more readings, then a button appears which enables them to combine those readings into a third one. Tested and working on FF and Chrome; no reason to suspect it will fail elsewhere, except the usual caveats about IE.
PS pointed out yesterday that many of the XML files generated from the last phase of the project were missing punctuation, because of incorrect markup the last time around. So I've archived those files, and started again. I've been creating text and XML files from a useful website.
I've got as far as Hommage. I've also generated the HTML versions of the files, so that someone working remotely can create readings and save the <link> elements until they come into the office.
I'll carry on working through the poems when I get a chance.
Discovered that in MS Word using Times New Roman (at least), if you enter a word with accents in lower case (été), then use the format function to style the characters as small-caps, you get small caps, but the accent marks are stripped.
The kludge is to create the accented character as an upper case (É) and then using the format function reduce the size of that character.
In LibreOffice, there is no such problem.
By default, sites are configured to have no primary sub structure. To change that, you have to change a setting in the site configurations. By default, users do not have the authority to do that, you have to ask for the permissions to be set to allow your user (or group) to have that capability.
Then to change the configuration set:
1) Go to Administration on the top bar
2) Choose configuration sets
3) Select the Edit tab (if you don't see an edit tab, you don't have authority, so ask)
4) Scroll down to Primary navigation
5) Click on the link next to Format
[UVicCa:_internal/formats/navigation/one-level-uvic-horizontal-nav]
6) Choose two level navigation from the list of files
[two-level-uvic-horizontal-nav]
7) Click confirm.
8) Scroll to the bottom and hit submit
In addition, there is a specific folder structure you have to have, and I suspect on many of those files you have to change the edit/metadata/custom metadata setting from the default (which could be undefined or any of the other checkbox values). We haven't yet figured that out. Will post when we've done so.
Made some updates at LH's request to the existing Hispanital site.
ED brought in the two RAs, and I walked them through the process of setting up a workspace, creating a new file, and building readings for it. I've also elaborated the details of this in an 8-page instruction document, which I finished today and sent out to them. They've been booked onto computers for the rest of the semester, and the first working session will be tomorrow.
Tried numerous instances of the object invoking the CircleMagic viewer and data, each with different values for the URL of the swf player file or of the xml data file.
I'm kind of stumped. I don't get what the pattern in the error messages is telling me (see below). As far as I know, the swf and data files on their server and my server are identical. Martin suggested it might be different Content-Type: values, so I checked the two data files and the Content-Type: value was the same.
-------------------
invoked from : http://www.radicalgolem.com/workspace/CircleMagic/demo/
data: http://www.radicalgolem.com/workspace/CircleMagic/xml/circle_data_related.xml
works
data: http://web.uvic.ca/~sarneil/CircleMagic/deploy/circle_data_related.xml
"Loading information
Loader created and formatted, beginning loading..."
-------------------
invoked from : http://web.uvic.ca/~sarneil/CircleMagic/deploy/circleMagicTest.html
their swf = http://www.radicalgolem.com/workspace/CircleMagic/demo_embeddable/circleMagic_1.swf
their data = http://www.radicalgolem.com/workspace/CircleMagic/xml/circle_data_related.xml
local absolute swf = http://web.uvic.ca/~sarneil/CircleMagic/deploy/circleMagic_1.swf
local absolute data = http://web.uvic.ca/~sarneil/CircleMagic/deploy/circle_data_related.xml
their swf in object, their swf in embed, their data : works
wrong swf in object, their swf in embed, their data : works
their swf in object, wrong swf in embed, their data : no instance
their swf, their data :
works
their swf, wrong their data :
"Loading information
Creating URLRequest...
ERROR: Cannot load information from URL, check that its properly formated"
their swf, (absolute) local data :
"Loading information
Loader created and formatted, beginning loading...
Creating URLRequest... "
their swf, wrong (absolute) local data :
"Loading information
Loader created and formatted, beginning loading...
Creating URLRequest... "
(absolute) local swf, their data :
"Loading information
There was a problem loading the data...
Problem(TypeError):Error #1010..."
(absolute) local swf, (absolute) local data :
"Loading information
There was a problem loading the data...
Problem(TypeError):Error #1010..."
their swf, (relative) local data :
"Loading information
Loader created and formatted, beginning loading...
Creating URLRequest... "
their swf, wrong (relative) local data :
"Loading information
Loader created and formatted, beginning loading...
Creating URLRequest... "
(relative) local swf, their data :
"Loading information
There was a problem loading the data...
Problem(TypeError):Error #1010..."
(relative) local swf, (relative) local data :
"Loading information
There was a problem loading the data...
Problem(TypeError):Error #1010..."
Judy was unable to create primary sub menu items, so we wrote to JS. She sent us back instructions and an example. Judy followed those with my assistance and still we did not get primary sub menu items.
I asked JS if the system admins had to configure anything to make all this work and she said no.
I then looked into the edit-configurations settings for a page and discovered that in the PRIMARY NAVIGATION section, you can specify things like "uvic-one-level-primary" or "uvic-two-level-primary". When I specified the latter, I did see primary-sub menu items, but I also saw the same items as secondaries. Wrote again to see if the right voo-doo with these settings on the the combination of pages in combination with the right folder structure will produce the results we want. Will blog once we get a fully successful plan.
A couple of the people on the committee reviewing applications to English grad school reported problems downloading the pdf files when at home. Turns out that the pdf files are up to 50 MB in size, so might take a while to download, and in particular might take considerably longer to download at home than at an office in the University. I couldn't see any other reason why the downloads would "fail" other than the users gave up before the file had come down entirely.
Modified the code on the page so that it displays the file size for each downloadable file - about all I can do. Also emailed the people with a blurb on what affects the speed of the download and they can at least get a rough sense of how long a big file will take by downloading a small file and doing the math.
AC reported that users were having a hard time successfully getting through the reCaptcha form element on the page that allows users to sign up as members of the VPN. Greg and I tried to create a new user for Greg and after a dozen or more attempts gave up - so can definitely confirm the difficulty reported.
I then went in as an admin and found a configuration (Settings/RegisterPlus) that allowed me to pick which Captcha service I wanted to use, so I selected a different one and Greg found it easier to read.
AC seems happy with it. I guess time will tell if the bots can beat the clearer captcha.
It was during these modifications that I was getting the mysterious "sometimes you authenticate, sometimes you don't" behaviour blogged elsewhere.
Medi wanted half a dozen audio players on their workshop archive page. After some experimenting with HTML5 (blogged here), I needed something that worked now for browsers new and old, so I resorted to a flash player.
I implemented a Google audio player and the very simple player created by Martin for use in HotPot pages. They elected to go with the more elaborate Google player due to the length of the recordings.
Sample:
<object
type="application/x-shockwave-flash"
data="http://www.google.com/reader/ui/3523697345-audio-player.swf"
width="400"
height="27">
<param name="FlashVars" value="audioUrl=audio/2011/Milwright_Introduction.mp3" />
</object>
AC reported: I'm using the plugin anthologize to compile a PDF of my blog posts to submit as part of my annual review: http://anthologize.org/about/
The plugin lets you chose what posts to insert in the anthology, and I've selected all the ones that I wrote. You can take a look in the dashboard.
It all seems to be working perfectly but...when I exported to a PDF, the author came up on the front page as me and Chelsea Falconerr!!
In the Anthologize plugin interface, there is a textfield for author(s). If you fill that in, then the text you fill in appears in the output. If you leave that empty, then the program must somehow extract the author information from the records in the database for the document. Somehow both Alison and Chelsea must somehow be associated as authors of the document. As there is an easy fix (manually providing the information) I didn't explore the intricacies of how Anthologize works out authorship when no value is provided.
AC reported: I updated the creative commons license to 3.0, using the plugin. But the front page of the website for VPN , in the bottom right corner, still displays the old 2.5 license. I can't see where to update that.
Spent about an hour trying to figure out how that home page is created, and specifically where the information displayed to the user about what version of the CCL is in force comes from - without success so far.
AL of PAAS reported: I have a problem with the labs not showing up as B01, B02, etc. They appear as A01, lab. Same when I select a Tutorial, it doesn't appear as T01 which is what I need.
Code to edit was in the large manage_calendars.php file. Existing code prepended different letters, but only for offerings in term F, S or Y. Got her to confirm that she wanted the requested change to apply to all course offerings (i.e. including all the summer terms).
Made necessary changes. Clifton's code has about 100 instances (1 for each cell in table the represents all possible time slots in an academic week, plus a few for various list presentations), so changed all of those. Tested OK, and no problem reports since
Met with folks from Pacific and Asian Studies to begin planning the Cascade process. They're going to look at a range of sample sites, think about the nav plan, and create a project light web document, and then we'll meet again to finalize the nav plan during or after reading week.
A department had the following folder setup, the www, ma, and phd folders have a .htaccess file specifying which netlink ids are allowed in, the docs folder does not:
www
ma
phd
docs
Example case: htaccess in ma folder allows user1 in, htaccess in www folder does not.
If user1 browses to ~account, they are challenged and can not successfully authenticate.
If user1 browses to ~account/ma, they are challenged and can successfully authenticate
If user1 browses to ~account/docs, they are challenged and can not successfully authenticate because docs is a subfolder of www, so under the control of the htaccess file in www.
Here's the catch, if user1 browses to ~account/ma and authenticates successfully, and if on the page there is a link to a file in the docs folder, then user1 will be challenged by the htaccess file in the www folder to authenticate and can not successfully authenticate.
So, in general, htaccess file in folder X controls access to all child folders, unless the child folder has an htaccess file. The child-folder's htaccess file over-rules the parent-folder's htaccess rule, but of course the scope of that authentication is the child folder.
After updating the Instructions to include all the new features, and a bit more testing, I've rolled out the changes to the live VPN site.
I've created a setup script which creates a .desktop file. If you drag and drop a text file containing a transcription of a poem onto the desktop launcher, it creates an XML file, then marks it all up with segs, transforms it to HTML, and opens the XML in oXygen and the HTML in your web browser. It now takes less than a minute to copy/paste a poem and create the XML markup for it. You can also modify the XML (for instance adding your own readings), and then drop that on the launcher to create a new HTML file. New XML files are automatically added to SVN, and existing ones are backed up before being changed.
This model looks to be very powerful for a variety of contexts; I think this code will get re-used quite a bit.
Today I wrote and tested XSLT, CSS, and JavaScript for creating HTML files from the XML markup; these files have tools for creating the <link> elements that constitute distinct readings, ready for pasting back into the original XML documents. That basically concludes the functionality I need to create. The last remaining task for me, during this phase, is to create a tutorial package for the RAs.
This code may also be useful for the MoM project, to allow people to select events forming part of a single journey.
I now have a single working XSLT file which will do the following things:
<seg>s and <supplied> bits, and the links, and create new segs appropriately.<div type="poem">, with at least two returns between stanzas and only one return between lines, and do all the markup on it, including the <seg>s.This will enable me to convert over all of the previous poems ready to go in the new system, as well as providing a really simple template for new transcriptions that will get the teams working very quickly. Tomorrow I'll create the XSLT to create the XHTML to build the links.
Today I wanted to copy all the data from the live to the dev db, to do some testing with the new codebase. I found that one of the procedures implemented on dev was broken (presumably it wasn't updated when the live db was fixed by JN recently). I tried deleting the broken procedure, which took several minutes and locked up my session on phpMyAdmin, but eventually worked. Then I tried recreating it using the code from the live db, but this would not work at all. I concluded that for some reason, procedures and functions can only be created from a CLI session on the server. I have a vague memory that we've discovered this before; JN had to connect to the server to make his updates to the procedures.
In the end, I concluded that since the triggers and procedures only exist in order to keep the poem_search table updated for the WordPress site search, I don't really need them on the dev db to test the data-entry GUI, so I've stripped all the triggers from the dev db. That means we can't actually test the triggers and procedures if we have to work on them, so at some point I'll have to log into mysql and reconstruct them, but I'll do that when we need it.
Using the gui to the wikibooks API at http://en.wikibooks.org/wiki/Special:ApiSandbox, I ultimately want to get data for each page on each user and what modifications they've made to that page.
Because anybody can add a page to the DevMS, and the naming convention requires that all page titles begin with "The Devonshire Manuscript/", I did this query to get a list (max of 500 pages) of the pages in the collection:
which returns results like this:
<api>
<query>
<allpages>
<p pageid="259759" ns="0" title="The Devonshire Manuscript" />
<p pageid="264110" ns="0" title="The Devonshire Manuscript/94r-96r" />
<p pageid="264051" ns="0" title="The Devonshire Manuscript/A my herte a what eilith the" />
...
<p pageid="262594" ns="0" title="The Devonshire Manuscript/ys yt possyble" />
<p pageid="262460" ns="0" title="The Devonshire Manuscript /Take hede be tyme leste ye be spyede" />
</allpages>
</query>
</api>
then for each page id, I could run a query like this:
http://en.wikibooks.org/w/api.php?action=query&prop=revisions&format=xml&rvlimit=max&pageids=259759
(the 'rvlimit=max' bit is crucial, or you get only the most recent revision)
which returns results like this:
<api>
<query>
<pages>
<page pageid="259759" ns="0" title="The Devonshire Manuscript">
<revisions>
<rev revid="2249136" parentid="2249131" user="Cultures4" timestamp="2012-01-12T00:38:18Z" size="21716" comment="Edited TOC, added link." />
<rev revid="2249131" parentid="2249119" user="Cultures4" timestamp="2012-01-12T00:21:45Z" size="21711" comment="Added link to TOC." />
...
<rev revid="2208491" parentid="2208489" minor="" user="Cultures92" timestamp="2011-11-09T19:45:55Z" size="393" comment="" />
<rev revid="2208489" parentid="0" user="Cultures92" timestamp="2011-11-09T19:43:18Z" size="403" comment="inserted the TOC and status (0%)" />
</revisions>
</page>
</pages>
</query>
</api>
So, from that I can derive for each page which users made changes, but nothing about the kind of changes (other than whether the net effect was to increase or decrease the size of the page).
Met with CC
She wants a CircleMagic output for each page in the DevMS wikibook. The primary breakdown is by user, the secondary breakdown is by type of change (ideally modification of links, additions to text, deletions to text). We'd also create a Circle Magic output for the aggregate of all the pages.
I continue to have huge headaches trying getting the titles= or pageids= fields to do anything useful (i.e. for the results to be filtered so that only those records which match the title or pageid value get through). Will post more on that shortly.
<circleData related="true">
<!--focus is the "main" thing... whichever we are comparing among different sources-->
<!-- innermost ring of display is obtained from the sources/source/id elements -->
<!-- each subsequent ring moving out is obtained from the details/detail/id elements within each source element -->
<focus frequency="192">Say</focus> <!-- this count has to equal sum of counts in sources/source/id -->
<sources>
<source>
<id frequency="130">Blake</id> <!-- this count has to equal sum of counts in each ./details/detail set -->
<details>
<detail> <!-- sum of counts of children must equal count in the ./::parent/id element-->
<id frequency="90">Selected Poems</id>
<id frequency="30">Selected Poems</id>
<id frequency="10">Selected Poems</id>
</detail>
<detail> <!-- sum of counts of children must equal count in the ./::parent/id element-->
<id frequency="40">1777-1788</id>
<id frequency="50">1789-1797</id>
<id frequency="10">1798-1807</id>
<id frequency="20">1789-1808</id>
<id frequency="10">1808-1822</id>
</detail>
</details>
</source>
<source>
<id frequency="62">Stein</id>
<details>
<detail>
<id frequency="26">Collection 1</id>
<id frequency="23">Collection 2</id>
<id frequency="13">Collection 3</id>
</detail>
<detail>
<id frequency="36">1894-1916</id>
<id frequency="26">1916-1945</id>
</detail>
</details>
</source>
<sources>
</circleData>
I have a rather convoluted stylesheet working which tags and ids all words or punctuation marks within each line, and also retains the spaces between them as text nodes. It may need some tweaking to deal with in-word punctuation, but we may not have this problem with French (it shows up with "don't" in English, which becomes three segments).
Met with ED to discuss the next phase of the project, which needs to get moving quickly. Outcomes:
<seg>s, so the markup team can produce minimal markup and then run this transformation. I've made a start on this, but it's actually not straightforward at all if you also need to preserve the spaces between segments, so I'll focus on this for the next couple of days.return '<a href="' . get_bloginfo('wpurl') . '/?vpn_search=' . $this->query . '&page=' . $page . '">' . $text . '</a>';
The advanced search had no value in the query field of the result set object and did not use the vpn_search= attribute. I modified the code so that
if this->query had a length > 0
assume it's a simple search and echo that original line of code. Otherwise
get the $_SERVER['QUERY_STRING'] value (as I know the complex query created by the advanced search is in there) and manipulate it to create the appropriate query value for the link.
I don't understand the code well to know why the advanced search isn't providing a value for the query field in the resultset object.
I'm trying to get all the users that have made changes to pages in the Devonshire manuscript.
I started with:
http://en.wikibooks.org/w/api.php?action=query&list=allusers&format=xml&auprop=groups&aulimit=100&titles=The%20Devonshire%20Manuscript
and that ignored the titles argument and just returned the first 100 users in wikibooks.
I then added a username prefix:
http://en.wikibooks.org/w/api.php?action=query&list=allusers&format=xml&auprefix=Culture&auprop=groups&aulimit=100&titles=The%20Devonshire%20Manuscript
and that returned 4 values: Cultures17, Cultures22, Cultures4, Cultures92, and Culturesurbaines
Obviously I need to figure out a way to get the username of anyone who's made a change to any of the Devonshire pages, and I don't think I can do it using this kind of query, because (as virtually always) the value in the titles field is ignored. I think I'll try getting the more direct route of getting a list of recentchanges for each of the titles generated by my query blogged earlier and go from there.
Still having a major headache trying to get the "titles=" field to behave as I expect (i.e. to restrict the values returned to those that match the title value).
If I configure this query:
I get a list of all the pages whose titles begin "The Devonshire Manuscript".
I'll then have to run each of those pages through a query like this to get the revisions for it:
action=query
prop=revisions
titles=[title field from item i of list generated above]
aplimit=max
The docs say that if I provide more than one title (using a pipe-delimited string), it will return only the most recent revision for each page in the list. What I want are all the changes made between time X and time Y on each of the pages, and this two-step process is the only thing I've figured out so far.
I suspect that I will want information sorted by users and not by pages, so I'll look into that next.
AC asked to modify the privileges of a WordPress user, so I changed that user's role from administrator to subscriber, and sent an email to AC listing the other roles and what privileges each had in case she wanted something other than subscriber. Also noticed that the admin user had the same person's contact information, so changed the personal contact information and the password for the admin user.
In doing that I discovered that if WordPress user X has provided a given email address, then no other WordPress user may provide the same email address. I'm not sure why there is that restriction, as presumably the username is the unique identifier (it can't be modified once created), not the email address.
Dept wants us to add half a dozen mp3 files to one of the pages on their site. I thought I'd take the chance to see what would be involved in updating the page from 2002-era html 1.0 transitional to html5 so I could include an audio element.
There were a couple of upper-case / lower-case issues with attribute values, and a number of no-longer-supported attributes for table elements (e.g. border="0", cellpadding="0", cellspacing="0"). I eventually got the page to validate as HTML5, but have a couple of stubborn table cell borders that show up when I don't want them to.
The navigation structure is generated by javascript and included on each page, so when I made the modifications to ensure validation against html5, I started to get some unwanted artefacts on all the rest of the pages on the site.
I might be able to thrash out the gui issues so that the shared elements work in both xhtml-1 and html5, but I'm not sure it's worth the bother for this page on this site.
I do wonder what kind of support the cascade pages have for html5, as people will want to include media elements (and do other things afforded by html5).
Having a hard time distinguishing between the RecentChanges list and the Revisions property - not really sure how they relate to each other. It seems I can do pretty similar queries using either, but I suspect I'm missing something.
Still can't get the "titles=" box to have the expected effect (i.e. I expect that results returned are limited to those pages whose title equals the value provided, whereas I'm sometimes getting that, sometimes getting results from any page regardless of title and sometimes getting no results.
I haven't yet figured out how to specify anything other than hard-coded values for page titles, user names etc. For example, if I want to search for all pages whose title includes (or starts with) "The Devonshire Manuscript" rather than pages whose title = "The Devonshire Manuscript"; if I want to include wildcards in the value for the user name, though I can provide a |-delimited list of all user names I'm interested in.
New abstract, photo etc. for Jan 19 talk.
Started poking around with the wikimedia API. Have yet to figure out how to get it to return results based on the title of the page. (i.e. I can specify a user and get only that user's actions, but when I similarly specify a page expecting to get only the changes to that page, I get changes made to any page).
To start have been using the handy web-based form at http://en.wikibooks.org/wiki/Special:ApiSandbox