on preparemovie
if listP(gBlobList) then set gBlobList = 0
if (the soundlevel <>5) then set the soundlevel = 5
preLoadMember (member "quote1" of castlib "speech"), å
(member "quote8" of castlib "speech")

-- [introduction] This code/text offers the crowd as one way of describing
-- the agents (those that have the power to act for effect) in internet
-- space, and to reveal some insights into the possibility of collective
-- action. By the use of this collective noun, the 'crowd' does not merely
-- describe any type of collective (of a generic community, or the public,
-- etc) but what historian Georges Rudé has called a 'direct contact' or
-- 'face-to-face' group (1995:3).

-- The crowd appears as a unifying force acting like a single body or
-- machine; with common elements such as those of direct action and a
-- fundamental belief in collective aims. So what happens when these social
-- relations are indirect and stretched across global space?

end

-- Hold on Current Frame Behaviour

on exitFrame
go the frame
end

-- The internet is not a fixed object and cannot be described simply as a
-- technological medium or a constituency of users. Like a crowd, is a
-- set of interconnections, where exchange and collective actions are of an
-- unpredictable nature. Describing a crowd as a 'multi-user behavioural
-- space' might help to define these collective actions.

on getBehaviorDescription
return å
"Loops the Playback Head on the current frame to pause the movie.
All interactive elements in the frame continue to function.
Drag to a sprite or frame in the script channel. No parameters."

-- The central concern here is whether this digitised and dispersed
-- 'global' formation demobilises the crowd and serves to diminish its
-- political agency. What insights does the historical analogy reveal?

on BeginSprite me
if not listP(gBlobList) then set gBlobList = []
add(gBlobList, the SpriteNum of me)
set FloatRadius = (the width of sprite (the SpriteNum of me)) /float(2)
set the Radius of me = integer(FloatRadius)
set the Contacts of me = []
set the Links of me = []
set the OpenLink of me = 0

set Hpoint = random((the stageright - (the Radius of me * 2)) - the stageleft)
set Vpoint = random((the stagebottom - (the Radius of me * 2)) - the stagetop)
set the loc of sprite (the SpriteNum of me) = point(Hpoint, Vpoint)
end

-- On one level, it might be assumed that a crowd is simply the sum of its
-- constituent parts.

-- [text] According to Rudé, there is a tendency to represent the crowd as
-- an oversimplified disembodied mass, usually taken for a 'mob': "and it
-- is not surprising that the possessing classes, wherever they were unable
-- to control its energies, should have looked on the crowd as a fickle
-- monster, lacking in both rhyme and reason."

-- Alternatively, the crowd can be broken down into particular behaviours
-- and beliefs. On closer inspection, there are sub-crowds, there are
-- relationships of the active few and the inactive mass, of the inside and
-- outside, and so on. It is this contradiction and tension between the
-- whole and its constituent parts that makes the crowd so unpredictable.
-- But typically, the crowd is represented as a mass that is inferior to
-- its parts, acting in a 'hysterical' manner without reason.

-- Of course, the crowd has always acted precisely with reason, even if
-- those in power don't agree with the reason. Undoubtedly there are
-- dominant and underlying motives for all disturbances; both economic and
-- political. But it is worth emphasising that popular disturbances are
-- generally well-defined by the participants (note the active noun),
-- seeking change fuelled by real or imagined oppression towards material
-- or ideological improvement. Therefore to characterise the crowd as an
-- abstract lumpen mass without definition, fails to determine the motives
-- and indeed agency underlying its collective action.

on CheckOverLap me
repeat with n in gBlobList
if (getone(the Contacts of me, n) = 0) then
if (n <> the SpriteNum of me) and (sprite(the SpriteNum of me) å
intersects sprite(n)) then
sendSprite(n, #SetContact, the SpriteNum of me)
sendSprite(the SpriteNum of me, #Speak, 1)
add(the Contacts of me, n)
set the OpenLink of me = 1
sendAllSprites(#FindFreeLink, the SpriteNum of me)
exit repeat
end if
end if
end repeat
end

-- [text] Such a fear of the rampant irrational crowd is typified by Freud
-- who claims that: "in a group the individual is brought under conditions
-- which allow him [sic] to throw off the repressions of his unconscious
-- instinctual impulses[...] In a group every sentiment and act is
-- contagious."

-- From the outside, a crowd is ugly, spontaneous, unstable (and hence
-- destabilises meaning), and is militant (in an assault on meaning). Yet,
-- within the crowd, meaning needs to be unified in order to achieve clear
-- targets and objectives. Despite the fact that speeches were rare in the
-- pre-industrial crowd, there is a consistent need to establish channels
-- of communication, the transmission of ideas through the crowd.

on SetContact me, who
if not(getone(the Contacts of me, who)) then add(the Contacts of me,who)
sendSprite(the SpriteNum of me, #Speak, 2)
end

-- Pavel BÙchler claims that communication takes place like a "ripple
-- effect" through direct contact from person to person, spreading like a
-- virus (1997). Information travels through the crowd in all directions
-- from no fixed point of origin in a web-like manner. This is what makes
-- the crowd so unpredictable, uncontrollable and potentially disruptive.

on SetLink me, who
if (the OpenLink of me) and not(getone(the Links of me, who)) then
add(the Links of me, who)
set the OpenLink of me = 0
sendSprite(who, #FormLink, the SpriteNum of me, getLast(the Contacts of me))
sendSprite (getLast(the Contacts of me), #JoinLink, who)
end if
end

on JoinLink me, who
add(the Links of me, who)
end

on Move me
set the Position of me = the loc of sprite (the SpriteNum of me)
set Difference = (the Target of me - the Position of me)

-- Of course, movement is a question of frequency and speed; Capitalism has
-- always sought to overcome space making faster, more efficient flows of
-- goods and labour.

set the loc of sprite (the SpriteNum of me) = (the Position of me + IntInc)

if (abs(the locH of Difference) < SpeedFactor) or (abs(the locV of Difference) å
< SpeedFactor) then
SetTarget (me)
end if
end if

if (Divisor = 0) then
SetTarget (me)
end if
end

-- This is fast becoming a very generalised argument; whether the so-called
-- 'post-industrial crowd' or 'digital crowd' is a return to the
-- behavioural characteristics of the pre-industrial crowd is nevertheless
-- a unsettling question. If so, this might indicate that both pre-
-- industrial and post-industrial disturbances lack the specific
-- ideological aims of the industrial crowd with its political agency
-- diffused.

on UpdateLinks me
repeat with n in (the Links of me)
sendSprite(n, #SetLinkEnd, GetCentre (me))
end repeat
end

on GetCentre me
return (the loc of sprite (the SpriteNum of me) + the Radius of me)

-- The counter argument would simply be that the sphere of action has
-- changed sufficiently to code opposition differently.

on beginSprite me
set the StartMember of me = the member of sprite(the spritenum of me)
end

-- The question here is whether this user-'participation' might constitute
-- not just sociality but social agency. What would constitute a public
-- space, a space of sociality for an active crowd? Are there alternatives,
-- other spatial arrangements that might facilitate crowd-like action (such
-- as noise or illegibility).

on enterframe me
if (the member of sprite(the spritenum of me) <> the StartMember of me) then
if ((the timer - the StartTime of me) > 300) then
set the member of sprite(the spritenum of me) = the StartMember of me
end if
end if
end

on MouseUp me
set the StartTime of me = the timer
sendAllSprites(#ShowText, the WhichText of me)
set the member of sprite(the spritenum of me) = member "Hollow" å
of castlib "shapes"
end

-- Current research projects like MIT's "The Sociable Web" (as one example
-- of many) necessarily privilege the web as "a social environment",
-- developing interface designs to "visualise non-textual conversational
-- components" and examine on-line communication through an exchange of
-- actions and reactions.

on Speak me, Channel
puppetsound Channel, member (the WhichSound of me) of castlib "speech"
end

on ShowText me, TextMember
if (TextMember <> the WhichText of me) then
set the member of sprite(the spritenum of me) = the StartMember of me
end if
end

-- These interconnections might be managed and made visible in new ways but
-- they tend to function in ways which mimic the real world within rational
-- frameworks. This is the focus of Vesna's research in so far as "multi-
-- user groups within a presumably democratic space, mimic a very
-- structured corporate hierarchy".

-- A certain lack of coherence, a clash of codes, non-textual
-- communication, some irrational elements are all essential prerequisites
-- for this crowd. It would seem that a crowd of active agents might
-- function as the medium of communication in itself, like an intelligent
-- machine. If agents remain without agency, it rather misses the point of
-- what makes a crowd act effectively as a body of resistance.

-- Without doubt, the historical and geographical coordinates of the crowd
-- have shifted as a result of space and time compression, prompting a move
-- toward discussion of its interconnections and actions. Any crowd, and
-- especially a digital one, needs to be seen as part of a long history of
-- attempts to regulate the right to public assembly.

-- [text] Habermas says: "The public sphere itself appears as a specific
-- domain the public domain versus the private. Sometimes the public
-- appears simply as that sector of public opinion that happens to be
-- opposed to the authorities."

-- In this way, the crowd can be seen as firmly located in the foundations
-- of political discourse and the fear of the crowd can be taken as a fear
-- of sociality and open democracy (Gilbert, 1997).

on FindFreeLink me, who
if voidP(the Reserved of me) then
sendSprite (who, #SetLink, the SpriteNum of me)
end if
end

-- The Internet is a decentralised communication system forming networks
-- within networks. For Poster, this decentralisation is at the very core
-- of the Internet and in the ways in which subjectivity, and meaning are
-- being produced.

-- [text] Poster argues that our critical frameworks need to be changed to
-- fully consider the political impact of Internet and dismisses the
-- critical tools inherited from the industrial age, as it "presupposes the
-- fixed, stable identities of its members, the exact assumption the
-- internet puts into question" (1995:35).

-- In this schema, the rational, centred, individual subject of modernism
-- has been superseded by multiple, decentred, unstable identities that
-- sound uncannily similar to Rudé's description of the pre-industrial
-- crowd; in other words, formations as 'decentred' as the people who
-- constitute them. Poster suggests that we abandon Habermas' model as the
-- internet cannot reproduce embodied exchange (however sophisticated the
-- 'avatar' or 'agent').

on FormLink me
set the Reserved of me = TRUE
end

-- What this line of argument fails to recognise is the collective and
-- contingent nature of political agency. For example, 'affinity politics'
-- acknowledges multiple subjectivity but chooses to focus it for strategic
-- effect. It does seem possible that larger bodies of shared meaning might
-- constitute a politics (before incorporation kicks-in) in 'multi-user
-- behavioural spaces'. But any sense of collective political agency would
-- certainly be dependent on access and ability to use the technologies
-- available in a coordinated mass of shared targets and objectives.
-- How might these new forms of indirect action be best understood?
-- These relations are stratefied and uneven; not simply reducible to the
-- equivalent of face-to-face encounter.

on SetLinkEnd me, CentrePoint

if not listP(the EndPoints of me) then set the EndPoints of me = []
if not listP(the Horizontal of me) then set the Horizontal of me = []
if not listP(the Vertical of me) then set the Vertical of me = []

add(the EndPoints of me, CentrePoint)
add(the Horizontal of me, the locH of CentrePoint)
add(the Vertical of me, the locV of CentrePoint)

-- These responses indicate a need for solidarity and social action on a
-- global scale. Capitalism has always sought to overcome space making
-- faster, more efficient flows of goods and labour. A more complex mapping
-- would reveal preferred measurements, spatialities and geographies. This
-- is what Doreen Massey refers to as "two completely different
-- geographical imaginations of the world" (1997:10), revealing blatant
-- contradictions of capital's free movement: which proclaims 'goodness' on
-- the one hand, whilst maintaining tightly-controlled immigration policies
-- on the other.
-- The question is who has access to what forms of movement?

if (count(the EndPoints of me) = 2) then

sort(the Horizontal of me)
sort(the Vertical of me)

set TempRect = rect(0,0,0,0)
set the left of TempRect = getat(the Horizontal of me, 1)
set the right of TempRect = getat(the Horizontal of me, 2)
set the top of TempRect = getat(the Vertical of me, 1)
set the bottom of TempRect = getat(the Vertical of me, 2)

-- Like the crowd, globalisation is not a project but a process that hides
-- the agencies that produce it. Echoing Rudé's wish to uncover the crowd
-- as a faceless entity and an inevitable force, Massey sees the need to
-- define this term in the context of particular power relations. Despite
-- the fact that the potential for connectivity between different parts of
-- the world is increasing, the terms of these interconnections need to be
-- defined as different. Computer networks have their own specific
-- geographies and information flows too.

if (the locH of getat(the EndPoints of me,1) = å
getat(the Horizontal of me,1)) then
set BaseV = the locV of getat(the EndPoints of me,1)
set CompV = the locV of getat(the EndPoints of me,2)
else
set BaseV = the locV of getat(the EndPoints of me,2)
set CompV = the locV of getat(the EndPoints of me,1)
end if

set CurrentMember = the member of sprite (the spritenum of me)

-- In this model, power is not centralised but dispersed, like a web (or
-- crowd) with no centre or edge. Power now presents itself in multiple
-- flows rather than just in spaces like invisible information that passes
-- along its channels of communication.

-- [text] To Jameson, it is as if computer networks "offer some privileged
-- representational shorthand for grasping -- a network of power and
-- control even more difficult for our minds and imaginations to grasp: the
-- whole new decentered global network of the third stage of capital
-- itself" (1991:37).

if (BaseV ! CompV) then
set NewMember = member "SlopeDown" of castlib "Shapes"
else
if (abs(BaseV - CompV) <2) then
set NewMember = member "Horiz" of castlib "Shapes"
set the top of TempRect = (the top of TempRect -1)
else
set NewMember = member "SlopeUp" of castlib "Shapes"
end if
end if

if (abs((getat(the Horizontal of me,1) - å
getat(the Horizontal of me,2))) <2) then
set NewMember = member "Vert" of castlib "Shapes"
set the left of TempRect = (the left of TempRect - 1)
end if

if (NewMember <> CurrentMember) then
set the member of sprite (the spritenum of me) = NewMember
end if

-- Rather than some kind of expanded public sphere, this global space is
-- perhaps more a "'new space of collective alienation', one in which there
-- is a 'disconnection between people and spatial form'" (Morley & Robins
-- quoting Manuel Castells, 1995:31). Do computer-mediated communities
-- merely emphasise remoteness of contact, indirect relations, distance and
-- alienation?

set the rect of sprite(the SpriteNum of me) = TempRect

set the EndPoints of me = 0
set the Horizontal of me = 0
set the Vertical of me = 0

end if

-- If this is likened to a crowd, one is left wondering why it has gathered
-- in the first place; interaction has taken place but to no clear purpose.

end

-- Text Pane Behaviour

property StartPos
property StartTime

on beginSprite me
set the StartPos of me = the locV of sprite (the spritenum of me)
end

-- Perhaps it is this distinction between the real and the virtual crowd
-- (or text and code) that needs further investigation for what is virtual
-- might appear to be real and have real effects. If this is the case,
-- might there be a potential threat in a crowd forming in virtual space,
-- given the panic and current restriction over gatherings in 'real' space?
-- It would appear there is no corresponding panic over crowds in the
-- digital sphere.

on enterframe me
if (the locV of sprite (the spritenum of me) <> the StartPos of me) then
if ((the timer - the StartTime of me) > 300) then
set the locV of sprite (the spritenum of me) = the StartPos of me
end if
end if
end

-- [text] Robins argues there is something worryingly anti-political about
-- most commentaries on the Internet that deny the real complexities of
-- social and cultural relations, producing "In the end, not an alternative
-- society, but an alternative to society" (1996:100).

-- Such comments question the realism of virtual exchange. In a similar
-- manner (of critical realism), Sekula argues that it is an anachronism to
-- think that computer networks mark the end of traditional forms and
-- routes of capital. Despite the fact that the majority of goods are still
-- shifted by sea, movement is seen to be predominantly by cable (in a sea
-- of global flows).

-- [text] This is patently inaccurate according to Sekula, who wishes "to
-- counter the exaggerated importance attached to that largely metaphysical
-- construct, 'cyberspace', and the corollary myth of 'instantaneous'
-- contact between distant spaces [...] the blinkered narcissism of the
-- information specialist" (1995:50).

on ShowText me, TextName
set the StartTime of me = the timer
set the member of sprite (the spritenum of me) = member (TextName) å
of castlib "Text"
set NewPos = (((the stageBottom - the stageTop) - (the height of member å
(TextName) of castlib "Text")) / 2)
set the locV of sprite (the spritenum of me) = NewPos

-- [text] The potential of new media to constitute a crowd requires effort
-- (in the words of Buck-Morss) in "taking advantage of everything that the
-- new technology offers but, at the same time, being aware that you can't
-- rely on the technology to take you to a progressive result - that takes
-- politics".

on translate_cursor me, setting, image, mask, custom
if custom then
set val = [ member image, member mask ]
return val
end if
return setting
end

on beginSprite me
set oldcursor = the cursor of sprite the spritenum of me
set val = translate_cursor( me, the incursSet of
me,customImage,customMask,useCustom )
set the cursor of sprite the spriteNum of me = val

end

on endsprite me
set the cursor of sprite the spriteNum of me = oldcursor
end

-- And finally, as much as outmoded frameworks inherited from the
-- industrial age might be discredited, the point here is that the present
-- is still locked into these frameworks. So rather than the instantaneous
-- delivery of information, it still might actually take a week to cross
-- the Atlantic by ship. However long it takes, the crucial factor is that
-- capital regulates these flows. In all this cross-talk of global flows
-- and information exchange, there is a systematic forgetting of the crowd
-- [in the rush for consumer-tailored individualism].
-- Nevertheless, the crowd continues to refuse its dispersal.