NAME
Art::World - Modeling of creative processes
SYNOPSIS
use Art::World;
my $artwork = Art::World->new_artwork(
creator => [ $artist, $another_artist ] ,
owner => 'smonff'
title => 'Corrupted art institutions likes critical art'
value => 100, );
my $museum = Art::World->new_museum(
money => 1000,
name => 'Contemporary Museum of Art::World'
);
$museum->acquire( $artwork );
DESCRIPTION
Art::World
is an attempt to model and simulate a system describing the interactions and influences between the various agents of the art world.
It tries to draw a schematization of the interactions between art, institutions, influences and unexpected parameters during the social processes of artistic creation.
More informations about the purposes and aims of this project can be found in it's Art::World::Manual. Especially, the HISTORY and the OBJECTIVES section could be very handy to understand how this is an artwork using programming.
MOTIVATIONS
This project is a self-teaching experiment around the modern Perl object-oriented programming toolkit. In late 2020, I read a bit about Corrina and immediatly wanted to restart and experiment my old Art::World
project. While searching for something somewhat close to Corrina, since Corrina was only a draft and RFC, I discovered the Zydeco toolkit by Toby Inkster and immediatly felt very enthusiastic to use it to implement my idea. I hope it is a decent example of the possibilities this wonderful framework make possible.
It is possible that this toolkit may be used by an art management software as it could be needed in an art galery or a museum.
ROLES
Abstraction
This is were all kind of weird phenomenons between abstract artistic entities happen. See the Manual about how it works.
Active
Is used to dissociate behaviors belonging to performers as opposed to the public. Provide a participate
method.
Buyer
All those behaviors and attributes are encapsulated in the Buyer
role because there is no such thing as somebody in the art world that buy but doesn't sale.
The aquire
method is requiring some money
. The money
is provided by the Market
role.
$collector->acquire( $artwork );
Those behaviors are delegated to the change_owner()
method, and to the pay()
method from the Market
role.
When a Collector
acquire()
an Artwork
, the Artwork
ArrayRef
of owners is automatically cleared and substituted by the new owner(s). acquire()
will remove the value of the Artwork
from the owner's money.
$artwork->change_owner( $self );
When the paiement occurs, the money is allocated to all the artwork owners involved and removed from the buyer's fortune.
$self->pay( $artwork );
It delegate the payment to the pay()
method of the Market
role. If the payment is provided by an individual Buyer
, only one payment is done an the money is dispatched to all the sellers. If a Collective
buy the good, each member procede to a paiement from the Co-investors
point of view.
Collectionable
The collectionnable
provide a series of attributes for the ownership and collectionability of artworks.
If it's collectionable, it can go to a Collector
collection or in a Museum
. A collectionable item is automatically owned by it's creator.
Collectionable
provides a change_owner()
multi method that accepts either Collectors
or Coinvestors
as an unique parameter. It takes care of setting appropriately the new artwork owners and delegate the removal of the item from the seller's collection.
A private methode, $remove_from_seller_collection
is also available to take care of the removal of the to-be-sold Artwork
in the seller collection. Since those can be owned by many persons, and that Artists
can own their own artworks, but for now cannot be collectors, they are excluded from this treatment.
Collective
They do stuff together. You know, art is not about lonely Artists
in their Workshop
.
This has first been designed for collectors, but could be used to activate any kind of collective behavior.
This is quite a problem because what if a group of people wants to buy? We have a Coinvestor
class implementing the Collective
role that provide a collective-acquirement method.
It's acquire()
multi method provide a way to collectively buy an item by overriding the Buyer
role method. Coinvestor
is a class inheriting from Collector
that implement the Collective
role so it would be able to collectively acquire Works
.
Note that the signatures are different between Buyer
and Collective
roles:
$collector->acquire( $artwork );
# ==> using the method from the Buyer role
$coinvestors->acquire({ art => $artwork, collective => $coinvestors });
# ==> using the method from the Collective role
Just pass a self-reference to the coinvestor object and they will be able to organize and buy together.
Crud
The Crud
role makes possible to serialize most of the entities. For this to be possible, they need to have a corresponding table in the database, plus they need to not have a unserializable?
tag attribute. A Zydeco tag role is a role without behavior that can only be checked using does
.
The Crud role is made possible thanks to Teng, a simple DBI wrapper and O/R Mapper. Teng
is used through it's schema loader that directly instanciate an object schema from the database.
When trying to update a value, it is necessary to pass a table name and a hashref of attributes corresponding to the columns values. The table name is not case sensitive when using Art::World
Crud
helpers.
my $row = $self->dbh
->insert( 'agent', {
name => $artist->name,
reputation => $artist->reputation });
Note that it is extremely important that the testing of the database should be done in the t/crud.t
file. If you want to test database or model functionnalities in other tests, remind to create objects by specifiying the config parameter that use the test.conf
file: only the database referenced in test.conf
will be available on cpantesters and art.db
wont be available there, only t/test.db
is available.
Event
All the necessary attributes and methodes for having fun between Art::world's Agents.
Exhibit
Role for Places
that display some Artworks
.
Fame
Fame
role provide ways to control the aura and reputation that various Agents
, Places
or Works
have. Cannot be negative.
It has an handy bump_fame()
method that self-bump the fame count. It can be used in three specific maneers:
- pass a
PositiveNum
-
The fame will go higher
- pass a
NegativeNum
-
The fame he fame will go lower
- no parameter
-
In that case the value defined by
$self->config->{ FAME }->{ DEFAULT_BUMP }
will be used to increase the reputation.
my $artist = Art::World->new_artist(
reputation => 0.42,
name => 'Questular Rontok'
);
say $artist->bump_fame; # ==> 1.42
say $artist->bump_fame( 0.0042 ); # ==> 1.4242
If you try to update the fame to a negative value, nothing happens and a nice warning is displayed.
The fame can be consummed by pretty much everything. A Place
or and Agent
have a fame through it's reputation, and an Artwork
too through it's aura.
Classes that consume Fame
can have two different kind of attributes for storing the Fame
:
- aura
-
For
Works
only. - reputation
-
For
Agents
,Places
, etc.
Identity
Provide id
and a name
attributes.
Invitation
Language
Useful when criticizing art or participating to all kind of events, especially fo networking.
Manager
A role for those who take care of exhibitions and other organizational matters. See how being a Manager
influence an Agent
in the CLASSES section.
Market
It is all about offer, demand and money
. It is possible that a day, the discourse that some people have can influence the Market
.
It provide a pay()
method that can be used by entities consumming this role to exchange artworks on the market. This method accept an Artwork
as an and a Collector as parameters. It smartly find how many people bought the good and to how many sellers the money should be dispatched.
Showable
Only an object that does the Showable
role can be exhibited. An object should be exhibited only if it reached the Showable
stage.
Space
Could limit the number of person attending an event for example
Underground
Provide an experiment()
method.
Writing
This is much more than small talk.
CLASSES
Agent
They are the activists of the Art World, previously known as the Wildlife.
my $agent = Art::World->new_agent(
id => 1,
name => Art::World::Util->new_person->fake_name,
reputation => 10 # Would default to zero if none specified
);
$agent->participate; # ==> "That's interesting"
A generic entity that can be any activist of the Art::World
. Provides all kind of Agent
classes and roles.
The Agent
got an a networking( $people )
method that makes possible to leverage it's relationships
. When it is passed and ArrayRef
of various implementation classes of Agents
(Artist
, Curator
, etc.) it bumps the reputation
attributes of all of 1/10 of the Agent
with the highest reputation. If this reputation is less than 1, it is rounded to the $self->config->{ FAME }->{ DEFAULT_BUMP }
constant.
The bump coefficient can be adjusted in the configuration through { FAME }->{ BUMP_COEFFICIENT }
.
There is also a special way of bumping fame when Manager
s are in a Networking activity: The influence()
method makes possible to apply the special $self->config->{ FAME }->{ MANAGER_BUMP }
constant. Then the Agent
s reputations are bumped by the MANAGER_BUMP
value multiplicated by the highest networking Manager
reputation. This is what the influence()
method returns:
return $self->config->{ FAME }->{ MANAGER_BUMP } * $reputation;
The default values can be edited in art.conf
.
Art
Will be what you decide it to be depending on how you combine all the entities.
This is where we are waiting to receive some unexpected parameters: in other words, an INI
file can be provided.
Article
Something in a Magazine
of Website
about Art
, Exhibitions
, etc.
Artist
In the beginning of their carreer they are usually underground and produce experimental art, but this can change in time.
my $artist = Art::World->new_artist(
name => 'Andy Cassrol',
);
say $artist->is_homogenic;
#==> false
After getting collected, artists become homogenic.
$artist->is_underground if not $artist->has_collectors;
The artist got a lots of wonderful powers:
create
-
When the basic abstractions of Art are articulated, a creation occurs. It doesn't mean that it will create an
Artwork
, because it requires the intervention of otherAgents
. TheArtist
creates through a work concept. This articulation can group the different attributes of theAbstraction
role:discourse
,file
,idea
,process
,project
andtime
. have_idea
-
All day long
Artwork
The base thing producted by artists. Artwork is subclass of Work
that have a Showable
and Collectionable
role. They are usually considered as goods by the Market
but are also subject of appreciation by the Public
. A lot of Event
happen around them.
The collectionable
role provide their value
while they have their own attributes for material
and size
. The later limits the amount of atworks that can be put in a Place
's space during an Event
.
Book
Where a lot of theory is written by Critics
Coinvestor
Coinvestor
extend the Collector
class by providing an arrayref attribute of members
through the Collective
role. This role makes also possible to invest in artworks collectively.
Collector
A Collector
is mostly an Agent
that consume the Buyer
and Market
roles and that have a collection
attribute.
my $collector = Art::World
->new_collector(
name => Art::World::Util->new_person->fake_name,
money => 10_000,
id => 4 );
my $artwork = Art::World
->new_artwork(
creator => $artist ,
title => 'Destroy capitalism',
value => 9_999 );
$collector->acquire( $artwork ),
say $collector->money;
#==> 1
say $_->title for ( $collector->collection->@* );
#==> Destroy capitalism
Concept
Concept
is an abstract class that does the Abstraction
role. It should be extended but cannot be instanciated.
Critic
Curator
A special kind of Agent that can select Artworks, define a thematic, setup everything in the space and write a catalog. They mostly do Exhibition
.
Director
Exhibition
An Event
that is organised by a Curator
.
my $exhibition = Art::World->new_exhibition(
curator => [ $curator ],
title => $title,
creator => [ $curator ]);
Gallery
Just another kind of Place
, mostly commercial.
Since it implements the Buyer
role, a gallery can both acquire()
and sell()
.
Major place for Agent-
networking> activities. Always check it's space
though!
Idea
When some abstractions starts to become something in the mind of an Agent
.
my $art_concept = Art::World->new_idea(
discourse => 'I have idead. Too many ideas. I store them in a file.',
file => [ $another_concept, $weird_idea ],
idea => 'idea',
name => 'Yet Another Idea',
process => [],
project => 'My project',
time => 5,
);
Institution
A Place
that came out of the Underground
.
Magazine
Museum
Yet another kind of Place
, an institution with a lot of Artworks
in the basement.
Opening
An Event
where you can consume free treats and speak with other networkers from the art world.
my $t = Art::World::Util->new_time( source => '2020-02-16T08:18:43' );
my $opening_event = Art::World->new_opening(
place => $place,
datetime => $t->datetime,
name => 'Come See Our Stuff',
smalltalk => $chat,
treat => [ 'Red wine', 'White wine', 'Peanuts', 'Candies' ]);
Place
A Place
must invite()
all kind of Agents
that produce Work
or other kind of valuable social interactions. Depending of the total reputation
of the Place
it will determine it's underground
status: when going out of the underground
, it will become an institution.
Playground
A generic space where Art::World
Agents
can do all kind of weird things.
Public
They participate and visit events.
School
Sex
Squat
A place were art world agents are doing things. A squat that is not underground anymore become an institution.
Theory
When some abstract concept turns to some said or written stuff.
Website
Work
There are not only Artworks
. All Agent
s produce various kind of work or help consuming or implementing Art
.
It got an aura
attribute, see the Fame
about it or read about Walter Benjamin.
Workshop
A specific kind of Playground
where you can build things tranquilly.
AUTHOR
Sébastien Feugère <sebastien@feugere.net>
ACKNOWLEDGEMENTS
Thanks to everyone who has contributed to ack in any way, including Adrien Lucca, Toby Inkster, Ezgi Göç, Pierre Aubert, Seb. Hu-Rillettes, Joseph Balicki, Nicolas Herubel and Nadia Boursin-Piraud.
This project was made possible by the greatness of the Zydeco toolkit.
COPYRIGHT AND LICENSE
Copyright 2006-2021 Sebastien Feugère
This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.