User:Pedro Sá Couto/TW/Dewatermarking: Difference between revisions
No edit summary |
|||
(2 intermediate revisions by the same user not shown) | |||
Line 10: | Line 10: | ||
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 watermarked. The title can be a book, an academic journal, +++, and it can be both in pdf or EPUB. | ||
I will de-watermark the uploaded file and process it further, adding an anonymous uploader signature that will circulate on the cover of the title. | I will '''(1)''' de-watermark the uploaded file and process it further, '''(2)''' adding an anonymous uploader signature that will circulate on the cover of the title. | ||
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. | '''(1)''' Strategies such as watermarking are used by companies to discourage the distribution of proprietary material, making users more liable and accountable for their action. Therefore, customers are not able to share files they have paid for. With Tactical Watermarks I explore established reactive measures that help users evade surveillance in publishing. At the same time, I question how we can tackle this problem through the reappropriation of digital watermarks. | ||
'''(2)''' 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. | 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. | ||
Line 31: | Line 33: | ||
<source lang="python"> | <source lang="python"> | ||
# UPLOAD FILES | |||
# THIS SHOULD BE IN CONFIG | |||
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 02:06, 16 June 2020
STEPS
The de-watermarking process is separated in 2 steps:
1. Uploading a file to dewatermark
2. Filling the fields for the new watermark
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.
I will (1) de-watermark the uploaded file and process it further, (2) adding an anonymous uploader signature that will circulate on the cover of the title.
(1) Strategies such as watermarking are used by companies to discourage the distribution of proprietary material, making users more liable and accountable for their action. Therefore, customers are not able to share files they have paid for. With Tactical Watermarks I explore established reactive measures that help users evade surveillance in publishing. At the same time, I question how we can tackle this problem through the reappropriation of digital watermarks.
(2) 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/uploadbook/
Python View
# UPLOAD FILES
# THIS SHOULD BE IN CONFIG
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)