<%@LANGUAGE="VBSCRIPT"%> <% ' *** Logout the current user. MM_Logout = CStr(Request.ServerVariables("URL")) & "?MM_Logoutnow=1" If (CStr(Request("MM_Logoutnow")) = "1") Then Session.Abandon MM_logoutRedirectPage = "logout.asp" ' redirect with URL parameters (remove the "MM_Logoutnow" query param). if (MM_logoutRedirectPage = "") Then MM_logoutRedirectPage = CStr(Request.ServerVariables("URL")) If (InStr(1, UC_redirectPage, "?", vbTextCompare) = 0 And Request.QueryString <> "") Then MM_newQS = "?" For Each Item In Request.QueryString If (Item <> "MM_Logoutnow") Then If (Len(MM_newQS) > 1) Then MM_newQS = MM_newQS & "&" MM_newQS = MM_newQS & Item & "=" & Server.URLencode(Request.QueryString(Item)) End If Next if (Len(MM_newQS) > 1) Then MM_logoutRedirectPage = MM_logoutRedirectPage & MM_newQS End If Response.Redirect(MM_logoutRedirectPage) End If %> <% Dim spWebReadydata__id spWebReadydata__id = "2" if(Request("id") <> "") then spWebReadydata__id = Request("id") %> <% Dim rsCatList__MMColParam rsCatList__MMColParam = "1" if (Request.QueryString("id") <> "") then rsCatList__MMColParam = Request.QueryString("id") %> <% set rsCatList = Server.CreateObject("ADODB.Recordset") rsCatList.ActiveConnection = MM_vos2_STRING rsCatList.Source = "SELECT ParentCategoryID, CategoryLinkDepthFlag, CategoryID, CategoryName, CategoryLinkOrder FROM dbo.BrowseMenu WHERE ParentCategoryID = " + Replace(rsCatList__MMColParam, "'", "''") + "" rsCatList.CursorType = 0 rsCatList.CursorLocation = 2 rsCatList.LockType = 3 rsCatList.Open() rsCatList_numRows = 0 %> <% Dim rsName__MMColParam rsName__MMColParam = "1" if (Request.QueryString("id") <> "") then rsName__MMColParam = Request.QueryString("id") %> <% set rsName = Server.CreateObject("ADODB.Recordset") rsName.ActiveConnection = MM_vos2_STRING rsName.Source = "SELECT dbo.Categories.CategoryName, dbo.Categories.CategoryDescription FROM dbo.Categories WHERE (dbo.Categories.CategoryID = " + Replace(rsName__MMColParam, "'", "''") + ")" rsName.CursorType = 0 rsName.CursorLocation = 2 rsName.LockType = 3 rsName.Open() rsName_numRows = 0 %> <% set spWebReadydata = Server.CreateObject("ADODB.Command") spWebReadydata.ActiveConnection = MM_vos2_STRING spWebReadydata.CommandText = "dbo.spBrowse" spWebReadydata.Parameters.Append spWebReadydata.CreateParameter("@RETURN_VALUE", 3, 4) spWebReadydata.Parameters.Append spWebReadydata.CreateParameter("@id", 3, 1,1000,spWebReadydata__id) spWebReadydata.CommandType = 4 spWebReadydata.CommandTimeout = 0 spWebReadydata.Prepared = true set rsUnionTest = spWebReadydata.Execute rsUnionTest_numRows = 0 %> <% Dim rsParents__MMColParam rsParents__MMColParam = "1" if (Request.QueryString("id") <> "") then rsParents__MMColParam = Request.QueryString("id") %> <% set rsParents = Server.CreateObject("ADODB.Recordset") rsParents.ActiveConnection = MM_vos2_STRING rsParents.Source = "SELECT Root, CategoryID, CategoryName FROM dbo.Parents WHERE Root = " + Replace(rsParents__MMColParam, "'", "''") + "" rsParents.CursorType = 0 rsParents.CursorLocation = 2 rsParents.LockType = 3 rsParents.Open() rsParents_numRows = 0 %> <% Dim Repeat2__numRows Repeat2__numRows = -1 Dim Repeat2__index Repeat2__index = 0 rsCatList_numRows = rsCatList_numRows + Repeat2__numRows %> <% Dim Repeat1__numRows Repeat1__numRows = -1 Dim Repeat1__index Repeat1__index = 0 rsUnionTest_numRows = rsUnionTest_numRows + Repeat1__numRows %> <% Dim Repeat3__numRows Repeat3__numRows = -1 Dim Repeat3__index Repeat3__index = 0 rsParents_numRows = rsParents_numRows + Repeat3__numRows %> <% ' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters ' create the list of parameters which should not be maintained MM_removeList = "&index=" If (MM_paramName <> "") Then MM_removeList = MM_removeList & "&" & MM_paramName & "=" MM_keepURL="":MM_keepForm="":MM_keepBoth="":MM_keepNone="" ' add the URL parameters to the MM_keepURL string For Each Item In Request.QueryString NextItem = "&" & Item & "=" If (InStr(1,MM_removeList,NextItem,1) = 0) Then MM_keepURL = MM_keepURL & NextItem & Server.URLencode(Request.QueryString(Item)) End If Next ' add the Form variables to the MM_keepForm string For Each Item In Request.Form NextItem = "&" & Item & "=" If (InStr(1,MM_removeList,NextItem,1) = 0) Then MM_keepForm = MM_keepForm & NextItem & Server.URLencode(Request.Form(Item)) End If Next ' create the Form + URL string and remove the intial '&' from each of the strings MM_keepBoth = MM_keepURL & MM_keepForm if (MM_keepBoth <> "") Then MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1) if (MM_keepURL <> "") Then MM_keepURL = Right(MM_keepURL, Len(MM_keepURL) - 1) if (MM_keepForm <> "") Then MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1) ' a utility function used for adding additional parameters to these strings Function MM_joinChar(firstItem) If (firstItem <> "") Then MM_joinChar = "&" Else MM_joinChar = "" End If End Function %> Alan Liu, "The Art of Extraction"
layer hidden off the screen
UCSB English Department HomeUCSB English Department HomeUCSB English Department Home
 
 
Alan Liu
The Art of Extraction
Toward a Cultural History & Aesthetics
of XML and Database-Driven Web Sites

This page supplements a talk presented at The Digital Cultures Project and Microcosms conference on "Interfacing Knowledge: New Paradigms for Computing in the Humanities, Arts and Social Sciences," March 8-10, 2002, Univ. of California, Santa Barbara. (Last revised 3/10/02 )



<Preface>Patchwork Quilt Book Cover

</Preface>

Back to lecture table of contents Next lecture section


Previous lecture section Next lecture section

<Argument Title="The Blind Spot on the Page">

<Demo>

</Demo>


<Demo>

</Demo>




SQL statement:

SELECT * FROM Artists ORDER BY LastName, FirstName, Dates, Nation

XLST (and XPATH) statement:

xsl:value-of select="LEXIA_TITLE"/>



</Argument>

Previous lecture section Next lecture section


Previous lecture section Next lecture section

<Argument Title="The Cultural History of Extraction">

Wendell Piez on John Hall's Maine Rifle Works

Frederick Winslow Taylor's Shop Management (1903)

William Henry Leffingwell's Scientific Office Management (1917)

Taylor on "instruction cards":

The "instruction card," as its name indicates, is the chief means employed by the planning department for instructing both the executive bosses and the men in all the details of their work. It tells them briefly the general and detail drawing to refer to, the piece number and the cost order number to charge the work to, the special jigs, fixtures, or tools to use, where to start each cut, the exact depth of each cut, and how many cuts to take, the speed and feed to be used for each cut, and the time within which each operation must be finished. It also informs them as to the piece rate, the differential rate, or the premium to be paid for completing the task within the specified time. . . .

</Argument>
Previous lecture section Next lecture section


Previous lecture section Next lecture section

<Argument Title="The Aesthetics of Extraction">

General overview of the problem of aesthetics in new media:

Chart of Contemporary Aesthetics

Specific problem of "data transcendence":

  • Jennifer Jones, "Virtual Sublime: Romantic Transcendence and the Real," Diss., UCSB (in progress)

  • Steven Johnson, Interface Culture: How New Technology Transforms the Way We Create and Communicate (San Francisco/New York: HarperCollins, 1997)

J.M.W. Turner:

William Gibson, Neuromancer, pp. 180-81:

  • "Something dark was forming at the core of the Chinese program. The density of information overwhelmed the fabric of the matrix, triggering hypnagogic images. Faint kaleidoscopic angles centered in to a silver-black focal point. Case watched childhood symbols of evil and bad luck tumble out along translucent planes: swastikas, skulls and crossbones, dice flashing snake eyes. If he looked directly at that null point, no outline would form. It took a dozen, quick, peripheral takes before he had it, a shark thing, gleaming like obsidian, the black mirrors of its flanks reflecting faint distant lights that bore no relationship to the matrix around it"

Marcos Novak's "transarchitecture":

  • examples: 1 | 2 | 3

Jean-François Lyotard, "What is Postmodernism?", in The Postmodern Condition, p. 81:

  • "The postmodern would be that which, in the modern, puts forward the unpresentable in presentation itself; that which denies itself the solace of good forms, the consensus of a taste which would make it possible to share collectively the nostalgia for the unattainable; that which searches for new presentations, not in order to enjoy them but in order to impart a stronger sense of the unpresentable"

<Design_Speculations>

Cool things that might be done with data pours:
  • Make the presentation aware of the content, and vice versa:

    • branch the interface into different layouts based on conditional testing of the content

    • allow the interface to reject the content until certain conditions are met (e.g., "The database that is responsible for content on this page contains one or more instances of the following business buzzwords ("leverage," "innovate," "right size"). Please ask the responsible parties to remove these words so that this page can be displayed.")

  • Make the presentation control content:

    • pour data into a repeat structure of layers; then script the page so that dragging a layer out of the stack sets the next iteration of the repeat to filter content based on what was dragged out

  • "Bare the device":

    • make the rendered presentation of a data pour react to the formatting of the source code in the background (e.g., white space, line breaks, comments)
<Design_Speculations>

</Argument>

Previous lecture section Next lecture section


Previous lecture section

Data Island Containing All of VoS

<% If Not rsParents.EOF Or Not rsParents.BOF Then %> <% If ((rsParents.Fields.Item("CategoryID").Value)<3) Then %>
<% Else %> <% While ((Repeat3__numRows <> 0) AND (NOT rsParents.EOF)) %>
<% Repeat3__index=Repeat3__index+1 Repeat3__numRows=Repeat3__numRows-1 rsParents.MoveNext() Wend %> <% End If %> <% End If ' end Not rsParents.EOF Or NOT rsParents.BOF %> <%=(rsName.Fields.Item("CategoryName").Value)%>
<%=(rsName.Fields.Item("CategoryDescription").Value)%> <% While ((Repeat1__numRows <> 0) AND (NOT rsUnionTest.EOF)) %> <% 'J: Begin Code Dim indent indent = ((rsUnionTest.Fields.Item("Indent").Value))*32 %> <% If rsUnionTest("IsInfo")=0 Then 'J: Begin Is Category %> <% If rsUnionTest("Indent")<2 Then 'J: Begin Cat Top level with nav - horizontal rule %> <% End If 'J: End Cat Top level with nav - horizontal rule 'Continue - all categories, print row %>
"><%= rsUnionTest.Fields.Item("ItemName").Value %> <%= rsUnionTest.Fields.Item("Details").Value %>
<% 'J: End Categories Else 'J Begin Info %>
"> <%= rsUnionTest.Fields.Item("PreDetails").Value %> " target="VoSLink"><%= rsUnionTest.Fields.Item("ItemName").Value %> <%= rsUnionTest.Fields.Item("Details").Value %>
<% End If 'J: End Info 'J: End Code %> <% Repeat1__index=Repeat1__index+1 Repeat1__numRows=Repeat1__numRows-1 rsUnionTest.MoveNext() Wend %>
Previous lecture section