Cædmon Citation Network – Week 12+13

Hi all!

Summer is winding to a close, and our project continues to progress. The database is working, and is currently being made faster for even easier use. Books and articles are still being collected and scanned, and I am trying to split my time between scanning sources and collecting data.

At our last meeting Dan and I went over the exact specifications for the references I am collecting. Information is sorted into four types:

Text Quotes (TQ)

Text Mentions ™

Read the rest of this entry »

Cædmon Citation Network – Week 9

Hi all!

I finally get to start reading this week!!! While I am still not 100% complete in my sourcing of all the books and articles, it is looking as though I will definitely be able to start reading by Wednesday if not earlier.

I also have a bunch of books from inter-library loans that I need to scan portions of. That will be part of my job today.

The database will be ready this week as well. Garret says that there will be a few improvements that he will want to make, but I will be able to start using it this week. Read the rest of this entry »


Cædmon Citation Network – Week 6

Hi all!

This week I have been gathering sources for the pieces in our Cædmon bibliography. This is not a speedy task by any means! I admit that I have felt a bit impatient with myself and have been concerned that I should be at the point where I am gathering data by now, but I try to remind myself that it is important to make sure that we have a complete pool of sources from which to pull data, otherwise people could poke holes in our findings when we are all done. All of the proper experimental procedures that I learned way back in 7th grade science fair still apply here!

Dan gave me the key to the Digital Humanities lab on Monday, and I was able to go in and dig through Rachel’s drawer in the filing cabinet from last summer. I was excited to find that she had a ton of articles in there that simply need to be scanned. This will be time consuming, but worth it to have them all organized in the GLOBUS folder and accessible to everyone in our group. Read the rest of this entry »


Cædmon Citation Network – Week 5

Hi all!

Painfully short blog entry this week, I’m afraid. A lot has been accomplished this week, but there is not a lot to report.

The bibliography has been completed, with the final count being approximately 700 pieces of Cædmon scholarship. This number may increase or decrease as I read through the actual works. Some may have nothing to do with Cædmon (I erred on the side of having to much rather than too little), and others may point me in the direction of something I might have missed.

I have also begun to search out access to the pieces that make up the bibliography. Read the rest of this entry »


Understanding Relation Models in Yii

The core of any database driven website is its ability to handle table relations (if that sentence didn’t mean anything to you, you should first do some reading about relational databases, database design, and normalising data: an introduction aimed at textual editors can be found in my article “What digital editors can learn from print editorial practice.” Literary and Linguistic Computing 24 (2009): 113-125) One of the really useful things about the Yii MVC framework is the extent to which it allows you to systematise and automate the process of establishing these relations. Read the rest of this entry »

Creating compound attributes in Yii

Let’s say you have a database table called persons with separate attributes (fields) for lastName and firstNames. Elsewhere in your website, you want to refer to the underlying record in this table using the person’s whole name as a single entity (e.g. to provide a link, for example: <a href="http://example.com/index.php?r=Person/view&id=1">Jane Q. Public</a>. Sometimes, you might be able to refer to the two attributes separately. For example, if you simply wanted to echo the content in a view somewhere you could use code like this:
<?php echo CHtml::encode($data->person->firstNames) . ' ' . CHtml::encode($data->person->lastName); ?> 
This is a little inefficient if you are doing it a lot throughout your site, because you need to keep re-entering the same code correctly over and over again (and avoiding this is a main reason for going with an MVC framework like Yii in the first place). But the real trouble comes if you want to use the attributes in a context where the method you are invoking expects a single attribute—as is the case, for example, with the yii linking method CHtml::link. The way round this is to create a new compound attribute in your model. This means taking the two underlying attributes in your table and combining them into a single attribute already arranged the way you want that you can then invoke in other methods. Read the rest of this entry »

MYSQL Searches for use with Zencart [2]

2011 extract badge info

SELECT 
DISTINCT 
o.orders_id,
name.products_options_values, 
affiliation.products_options_values, 
o.customers_email_address
FROM 
orders_products_attributes AS name, 
orders_products_attributes AS affiliation, 
orders_products_attributes AS opa, 
orders AS o, 
orders_products AS op
WHERE 
name.orders_products_id = affiliation.orders_products_id
AND name.products_options = 'Name'
AND affiliation.products_options = 'Affiliation'
AND name.orders_id = o.orders_id
AND op.orders_id = o.orders_id
AND (op.products_id = '66' 
OR op.products_id = '68')

2011 extract registrations

SELECT o.orders_id, o.date_purchased, o.customers_id,
o.customers_name, op.products_id, op.products_name,
opa.products_options, opa.products_options_values, op.final_price
FROM orders AS o, orders_products AS op
LEFT JOIN orders_products_attributes AS opa 
ON op.orders_products_id = opa.orders_products_id
AND opa.products_options = 'Register for the 2011 TEI Conference'
WHERE op.orders_id = o.orders_id
AND (op.products_id = '66' 
OR op.products_id = '68')
AND o.date_purchased > '2011-07-01 00:00:00'
ORDER BY op.products_id

Extract workshop registrations:

SELECT opa.products_options_id, opa.products_options,
opa.products_options_values, o.customers_name 
FROM orders AS o, orders_products AS op 
LEFT JOIN orders_products_attributes AS opa 
ON op.orders_products_id = opa.orders_products_id 
WHERE o.date_purchased > '2011-07-01 00:00:00' 
AND products_options_id > '27' 
AND op.orders_id = o.orders_id 
AND opa.products_options_values != 'No optional activity'
AND op.products_id='66' 
OR op.orders_id = o.orders_id AND op.products_id='68' 
ORDER BY opa.products_options

Extract all orders on a product by product basis, ordered by product, including the option for year end of subscription if it is present and including any comments about refunds (note: the last two work only because I specifically the options I am looking for have excluded everything else).

SELECT o.orders_id, o.date_purchased, o.customers_id,
o.customers_name, op.products_id, op.products_name,
opa.products_options, opa.products_options_values, op.final_price,
osh.comments 
FROM orders AS o, orders_products AS op 
LEFT JOIN orders_products_attributes AS opa 
ON op.orders_products_id = opa.orders_products_id 
AND opa.products_options = 'Valid until the last day of'
LEFT JOIN orders_status_history AS osh 
ON op.orders_id = osh.orders_id
AND osh.comments LIKE '%REFUND INITIATED%'
WHERE op.orders_id = o.orders_id
AND o.date_purchased > '2011-09-30 23:59:59'
AND o.date_purchased < '2011-11-01 00:00:00'
ORDER BY op.products_id

To build a list of names and affiliations for conference badges (<2010):

SELECT name.products_options_values, affiliation.products_options_values
FROM orders_products_attributes AS name, 
orders_products_attributes AS affiliation
WHERE name.orders_products_id = affiliation.orders_products_id
AND name.products_options = 'Name'
AND affiliation.products_options = 'Affiliation';

Same thing, with email addresses:

SELECT name.products_options_values, 
affiliation.products_options_values, 
customers.customers_email_address
FROM orders_products_attributes AS name, 
orders_products_attributes AS affiliation, orders AS customers
WHERE name.orders_products_id = affiliation.orders_products_id
AND name.products_options = 'Name'
AND affiliation.products_options = 'Affiliation'
AND name.orders_id = customers.orders_id

The gets a list of subscribers:

SELECT customers.customers_name, customers.customers_email_address, 
workshop.products_options_values
FROM orders AS customers, orders_products_attributes AS workshop
WHERE customers.orders_id = workshop.orders_id 
AND (workshop.products_options_values = '2009'
OR workshop.products_options_values = '2010'
OR workshop.products_options_values = '2011'
OR workshop.products_options_values = '2012'
OR workshop.products_options_values = '2013')

This search pulls all the registrations for a specific workshop plus the number of orders in each case:

SELECT customers.customers_name, customers.customers_email_address, 
workshop.products_options_values, orders.products_quantity 
FROM orders AS customers, orders_products_attributes AS workshop, 
orders_products AS orders 
WHERE orders.products_name = 'Register for a Preconference Workshop' 
AND orders.orders_id = customers.orders_id 
AND orders.orders_id = workshop.orders_id 
AND workshop.products_options_values = 
'A TEI-based Publishing Workflow, Nov. 11, 15:00-18:00.'

This one builds a list of all invoices:

SELECT 
orders.lp_trans_num AS 1stData_Invoice_No, 
lp.transaction_reference_number AS 1stData_Reference_No,
orders.orders_id AS Zencart_Invoice_No,
orders.date_purchased AS Purchase_Date,
orders.billing_name AS Invoice_Name,
orders.order_total AS Invoice_Tot
FROM
orders,
linkpoint_api AS lp
WHERE 
orders.lp_trans_num > 0
AND
lp.lp_trans_num = orders.lp_trans_num;

This breaks the invoices down by item. It has one weakness: it can’t accommodate discount information from the table orders_total: this is because I need to do some kind of self-join on orders_total before using it: the table has 2-3 rows for each order (1 for sub-total, 1 for discounts (if any), potentially one more for coupons, and 1 for total), all in the same column.

SELECT 
orders.lp_trans_num AS 1stData_Invoice_No, 
lp.transaction_reference_number AS 1stData_Reference_No,
orders.orders_id AS Zencart_Invoice_No,
orders.date_purchased AS Purchase_Date,
orders.billing_name AS Invoice_Name,
orders.order_total AS Invoice_Tot,
products.products_name AS Item,
CONCAT(attributes.products_options,': ',attributes.products_options_values) AS Options,
products.final_price AS Unit_Price,
products.products_quantity AS Quantity,
products.final_price * products.products_quantity AS Item_SubTotal
FROM
orders,
orders_products AS products,
orders_products_attributes AS attributes,
linkpoint_api AS lp
WHERE 
orders.lp_trans_num > 0
AND
orders.orders_id = products.orders_id
AND
products.orders_id = attributes.orders_id
AND
products.orders_products_id = attributes.orders_products_id
AND
lp.lp_trans_num = orders.lp_trans_num
AND
(attributes.products_options = 'Valid until the last day of'
OR
attributes.products_options = 'Registration Category'
OR
attributes.products_options = 'Pre-conference Workshop')
;

Back to the future: What digital editors can learn from print editorial practice.

The last decade or so has proven to be a heady time for editors of digital editions. With the maturation of the digital medium and its application to an ever increasing variety of cultural objects, digital scholars have been led to consider their theory and practice in fundamental terms (for a recent collection of essays, see Burnard, O’Keeffe, and Unsworth 2006). The questions they have asked have ranged from the nature of the editorial enterprise to issues of academic economics and politics; from problems of textual theory to questions of mise-en-page and navigation: What is an Edition? What kinds of objects can it contain? How should it be used? Must it be critical? Must it have a reading text? How should it be organised and displayed? Can intellectual responsibility be shared among editors and users? Can it be shared across generations of editors and users? While some of these questions clearly are related to earlier debates in print theory and practice, others involve aspects of the production of editions not relevant to or largely taken for granted by previous generations of print-based editors. Read the rest of this entry »

The Ghost in the Machine: Revisiting an Old Model for the Dynamic Generation of Digital Editions

In 1998, a few months into the preparation of my electronic edition of the Old English poem Cædmon’s Hymn (O’Donnell forthcoming), I published a brief prospectus on the “editorial method” I intended to follow in my future work (O’Donnell 1998). Less a true editorial method than a proposed workflow and list of specifications, the prospectus called for the development of an interactive edition-processor by which “users will […] be able to generate mediated (‘critical’) texts on the fly by choosing the editorial approach which best suits their individual research or study needs” (O’Donnell 1998, ¶ 1). Read the rest of this entry »
Follow

Get every new post delivered to your Inbox

Join other followers: