User:Pedro Sá Couto/TW/Republishing: Difference between revisions
No edit summary |
No edit summary |
||
(One intermediate revision by the same user not shown) | |||
Line 8: | Line 8: | ||
=WHY?= | =WHY?= | ||
In this route of the application users can upload a title that is watermarked. The title can be a book, an academic journal, +++, and it can be both in pdf or EPUB. | In this route of the application users can upload a title that is not watermarked. The title can be a book, an academic journal, +++, and it can be both in pdf or EPUB. | ||
I will '''(1)''' add an anonymous uploader signature that will circulate on the cover of the title, '''(2)''' and republish it to Library Genesis. | I will '''(1)''' add an anonymous uploader signature that will circulate on the cover of the title, '''(2)''' and republish it to Library Genesis. | ||
Line 35: | Line 35: | ||
<source lang="python"> | <source lang="python"> | ||
app.config["BOOK_UPLOAD_DEWATERMARK"] = "/var/www/TacticalApp/app/static/dewatermark" | |||
app.config["BOOK_UPLOAD_REPUBLISH"] = "/var/www/TacticalApp/app/static/republish" | |||
app.config["BOOK_REQUEST"] = "/var/www/TacticalApp/app/static/request" | |||
app.config["ALLOWED_BOOK_EXTENSIONS"] = ["PDF", "EPUB"] | |||
app.config["MAX_BOOK_FILESIZE"] = 40 * 1024 * 1024 | |||
def allowed_book(filename): | |||
if not "." in filename: | |||
return False | |||
ext = filename.rsplit(".", 1)[1] | |||
if ext.upper() in app.config["ALLOWED_BOOK_EXTENSIONS"]: | |||
return True | |||
else: | |||
return False | |||
def allowed_book_filesize(filesize): | |||
if int(filesize) <= app.config["MAX_BOOK_FILESIZE"]: | |||
return True | |||
else: | |||
return False | |||
#Request a book | |||
#REQUEST IN DEWATERMARK | |||
# Link database | |||
db = dataset.connect('sqlite:///file.db?check_same_thread=False') | |||
# create table | |||
table = db['requested'] | |||
@app.route('/request_form', methods=['GET']) | |||
def request_form(): | |||
return render_template('public/request_form.html') | |||
# from GET /bookrequest render request.html | |||
@app.route('/uploadbook', methods=['GET']) | |||
def bookrequest(): | |||
books = table.find(order_by='-id') | |||
return render_template('public/upload_book.html', books=books) | |||
# from POST /submit store data in the database and forward to the request | |||
@app.route('/submit', methods=['POST']) | |||
def submit(): | |||
book = dict(title=request.form['title'], author=request.form['author'], publisher=request.form['publisher'], year=request.form['year'], extention=re$ | |||
table.insert(book) | |||
return redirect(url_for('index')) | |||
#Request a book | |||
#REQUEST IN REPUBLISH | |||
# from GET /bookrequest render request.html | |||
@app.route('/republish', methods=['GET']) | |||
def bookrepublish(): | |||
books = table.find(order_by='-id') | |||
return render_template('public/republish.html', books=books) | |||
</source> | </source> |
Latest revision as of 14:47, 20 June 2020
STEPS
The republishing process is separated in 2 steps:
1. Uploading a file to republish
2. Filling the forms for the new watermark
WHY?
In this route of the application users can upload a title that is not watermarked. The title can be a book, an academic journal, +++, and it can be both in pdf or EPUB.
I will (1) add an anonymous uploader signature that will circulate on the cover of the title, (2) and republish it to Library Genesis.
(2) In Tactical Watermarks I have created a space where users can upload a file they intend to share with other readers and automatically republish them to Library Genesis. Nowadays, we deal with few informal systems of parallel file sharing. Such an example is the Facebook group titled, Ask for PDFs from People with Institutional Access. This group brings the ones who are part of an institution and the ones who are not and cannot afford research papers together. Users ask for research papers, books, etc, and the ones who have access to them upload them online to this online space. Files are stored in a centralised database from Facebook and few ways exist to preserve the data gathered within the platform. If Facebook wanted, they could immediately shut-down, delete and restrict users from accessing this long and hard process of gathering, asking and creating this informal system of sharing and caring.
While Library genesis regularly fights against shut-down attempts. Strategies, to increase the lifespan of the collection are put in place, such as encouraging the creation of mirrors. Mirrors allow hosting voluntary copies of entire collections or parts of them over different servers and points of access, making these more challenging to control. Since I have created a space where users can request files, I will adopt this way to host and access the uploaded material in the Library. My intention is to increase the lifespan of files that have already been shared, increase the files circulating in Library Genesis and make the titles more permanently online to other readers that might need to access them.
(1) The uploaders signature is an anonymous watermarks with the technical and personal regards around sharing specific texts. In the end, these stories will circulate alongside the main narrative.
Tactical Watermarks has the primary objective of creating a positive discourse around the act of watermarking. This discourse will enable the creation of a top layer of information, able to embed traces of provenance in different texts. By provenance, I intend to express all the trails not used to surveil users but the ones able to trace historical importance to files and that facilitate precise documentation within an archive or library.
The uploaders signature challenges centralised distribution channels and wonders on how the process of adding stains can be twisted and revived. Stains are what I will call user patches or marks that are difficult to remove and that do not play an active role in archives. While exploring the process of adding imprints, different uses arose: as a way to obscure previous ones, of commenting on the situation and encouraging behaviours, to create relations and communities, augmenting the sense of solidarity in archives, for digital enhancements, marks of quality, etc.
Tactical Watermarks may form a discourse around topics such as anonymity, borders, archives, and provenance.While rethinking watermarks, I explore their hidden layers and aspects of surprise, visibility or invisibility, on different forms of communication. It is essential to acknowledge that watermarks have the power to infiltrate, perform different roles and create parallel streams of information within various texts. When it comes to publishing, Tactical Watermarks create a critical discourse around the right to access knowledge and represent the ones that fight for it!
PREVIEW
Printscreen from https://hub.xpub.nl/republish/
Python View
app.config["BOOK_UPLOAD_DEWATERMARK"] = "/var/www/TacticalApp/app/static/dewatermark"
app.config["BOOK_UPLOAD_REPUBLISH"] = "/var/www/TacticalApp/app/static/republish"
app.config["BOOK_REQUEST"] = "/var/www/TacticalApp/app/static/request"
app.config["ALLOWED_BOOK_EXTENSIONS"] = ["PDF", "EPUB"]
app.config["MAX_BOOK_FILESIZE"] = 40 * 1024 * 1024
def allowed_book(filename):
if not "." in filename:
return False
ext = filename.rsplit(".", 1)[1]
if ext.upper() in app.config["ALLOWED_BOOK_EXTENSIONS"]:
return True
else:
return False
def allowed_book_filesize(filesize):
if int(filesize) <= app.config["MAX_BOOK_FILESIZE"]:
return True
else:
return False
#Request a book
#REQUEST IN DEWATERMARK
# Link database
db = dataset.connect('sqlite:///file.db?check_same_thread=False')
# create table
table = db['requested']
@app.route('/request_form', methods=['GET'])
def request_form():
return render_template('public/request_form.html')
# from GET /bookrequest render request.html
@app.route('/uploadbook', methods=['GET'])
def bookrequest():
books = table.find(order_by='-id')
return render_template('public/upload_book.html', books=books)
# from POST /submit store data in the database and forward to the request
@app.route('/submit', methods=['POST'])
def submit():
book = dict(title=request.form['title'], author=request.form['author'], publisher=request.form['publisher'], year=request.form['year'], extention=re$
table.insert(book)
return redirect(url_for('index'))
#Request a book
#REQUEST IN REPUBLISH
# from GET /bookrequest render request.html
@app.route('/republish', methods=['GET'])
def bookrepublish():
books = table.find(order_by='-id')
return render_template('public/republish.html', books=books)