summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builder/README.md21
-rw-r--r--builder/__init__.py0
-rw-r--r--builder/builder.py69
-rw-r--r--builder/parser.py111
-rw-r--r--builder/paths.py6
-rw-r--r--builder/s3.py55
-rw-r--r--scraper/builder.py69
-rw-r--r--site/assets/css/css.css55
l---------site/content1
-rw-r--r--site/content/about/index.txt12
-rw-r--r--site/content/blog/2018-12-01-intro/index.txt13
-rw-r--r--site/content/blog/2018-12-02-second-blog-post/index.txt54
-rw-r--r--site/content/blog/2018-12-02-second-blog-post/vision.pngbin276521 -> 0 bytes
-rw-r--r--site/content/blog/2018-12-02-second-blog-post/wideimage.jpgbin71949 -> 0 bytes
-rw-r--r--site/public/about/credits/index.html57
-rw-r--r--site/public/about/disclaimer/index.html56
-rw-r--r--site/public/about/index.html26
-rw-r--r--site/public/about/press/index.html55
-rw-r--r--site/public/about/privacy/index.html134
-rw-r--r--site/public/about/style/index.html86
-rw-r--r--site/public/about/terms/index.html68
-rw-r--r--site/public/blog/2018-12-01-intro/index.html62
-rw-r--r--site/public/blog/2018-12-02-second-blog-post/index.html114
-rw-r--r--site/public/datasets/lfw/index.html112
-rw-r--r--site/public/datasets/vgg_faces2/index.html69
-rw-r--r--site/public/research/from_1_to_100_pixels/index.html101
-rw-r--r--site/templates/layout.html13
-rw-r--r--site/templates/research.html (renamed from site/templates/blog.html)17
28 files changed, 1083 insertions, 353 deletions
diff --git a/builder/README.md b/builder/README.md
new file mode 100644
index 00000000..1a6d3a1e
--- /dev/null
+++ b/builder/README.md
@@ -0,0 +1,21 @@
+Megapixels Static Site Generator
+================================
+
+The index, blog, and about other pages are built using this static site generator.
+
+## Metadata
+
+```
+status: published|draft|private
+title: From 1 to 100 Pixels
+desc: High resolution insights from low resolution imagery
+slug: from-1-to-100-pixels
+published: 2018-12-04
+updated: 2018-12-04
+authors: Adam Harvey, Berit Gilma, Matthew Stender
+```
+
+## S3 Assets
+
+Static assets: `v1/site/about/assets/picture.jpg`
+Dataset assets: `v1/datasets/lfw/assets/picture.jpg`
diff --git a/builder/__init__.py b/builder/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/builder/__init__.py
diff --git a/builder/builder.py b/builder/builder.py
new file mode 100644
index 00000000..44fbd1c6
--- /dev/null
+++ b/builder/builder.py
@@ -0,0 +1,69 @@
+#!/usr/bin/python
+
+from dotenv import load_dotenv
+load_dotenv()
+
+import os
+import glob
+from jinja2 import Environment, FileSystemLoader, select_autoescape
+
+import s3
+import parser
+from paths import *
+
+env = Environment(
+ loader=FileSystemLoader(template_path),
+ autoescape=select_autoescape([])
+)
+
+def build_page(fn, research_posts):
+ metadata, sections = parser.read_metadata(fn)
+
+ if metadata is None:
+ print("{} has no metadata".format(fn))
+ return
+
+ print(metadata['url'])
+
+ dirname = os.path.dirname(fn)
+ output_path = public_path + metadata['url']
+ output_fn = os.path.join(output_path, "index.html")
+
+ if 'research/' in fn:
+ template = env.get_template("research.html")
+ else:
+ template = env.get_template("page.html")
+
+ if 'datasets' in fn:
+ s3_path = "{}/{}/{}{}".format(os.getenv('S3_ENDPOINT'), os.getenv('S3_BUCKET'), s3_datasets_path, metadata['path'])
+ if 'index.md' in fn:
+ s3.sync_directory(dirname, s3_datasets_path, metadata)
+ else:
+ s3_path = "{}/{}/{}{}".format(os.getenv('S3_ENDPOINT'), os.getenv('S3_BUCKET'), s3_site_path, metadata['path'])
+ if 'index.md' in fn:
+ s3.sync_directory(dirname, s3_site_path, metadata)
+
+ print(s3_path)
+
+ content = parser.parse_markdown(sections, s3_path)
+
+ html = template.render(
+ metadata=metadata,
+ content=content,
+ research_posts=research_posts,
+ latest_research_post=research_posts[-1],
+ )
+
+ os.makedirs(output_path, exist_ok=True)
+ with open(output_fn, "w") as file:
+ file.write(html)
+
+ print("______")
+
+def build_site():
+ research_posts = parser.read_research_post_index()
+ for fn in glob.iglob(os.path.join(content_path, "**/*.md"), recursive=True):
+ build_page(fn, research_posts)
+
+if __name__ == '__main__':
+ build_site()
diff --git a/builder/parser.py b/builder/parser.py
new file mode 100644
index 00000000..ea273556
--- /dev/null
+++ b/builder/parser.py
@@ -0,0 +1,111 @@
+import os
+import glob
+import mistune
+from paths import *
+
+renderer = mistune.Renderer(escape=False)
+markdown = mistune.Markdown(renderer=renderer)
+
+def fix_images(lines, s3_path):
+ real_lines = []
+ block = "\n\n".join(lines)
+ for line in block.split("\n"):
+ if "![" in line and "](http" not in line:
+ line = line.replace('](', '](' + s3_path)
+ real_lines.append(line)
+ return "\n".join(real_lines)
+
+def wide_section(line, s3_path):
+ lines = fix_images(lines, s3_path)
+ return "<section class='wide'>" + markdown(lines) + "</section>"
+
+def normal_section(lines, s3_path):
+ if len(lines):
+ lines = fix_images(lines, s3_path)
+ return "<section>" + markdown(lines) + "</section>"
+ return ""
+
+def parse_markdown(sections, s3_path):
+ groups = []
+ current_group = []
+ for section in sections:
+ if section.startswith('# '):
+ continue
+ if '![wide]' in section:
+ groups.append(normal_section(current_group, s3_path))
+ groups.append(wide_section([section], s3_path))
+ current_group = []
+ else:
+ current_group.append(section)
+ groups.append(normal_section(current_group, s3_path))
+ content = "".join(groups)
+ return content
+
+def read_metadata(fn):
+ with open(fn, "r") as file:
+ data = file.read()
+ data = data.replace("\n ", "\n")
+ if "\n" in data:
+ data = data.replace("\r", "")
+ else:
+ data = data.replace("\r", "\n")
+ sections = data.split("\n\n")
+ return parse_metadata(fn, sections)
+
+default_metadata = {
+ 'status': 'published',
+ 'title': 'Untitled Page',
+ 'desc': '',
+ 'slug': '',
+ 'published': '2018-12-31',
+ 'updated': '2018-12-31',
+ 'authors': 'Adam Harvey',
+}
+
+def parse_metadata_section(metadata, section):
+ for line in section.split("\n"):
+ if ': ' not in line:
+ continue
+ key, value = line.split(': ', 1)
+ metadata[key.lower()] = value
+
+def parse_metadata(fn, sections):
+ found_meta = False
+ metadata = {}
+ valid_sections = []
+ for section in sections:
+ if not found_meta and ': ' in section:
+ found_meta = True
+ parse_metadata_section(metadata, section)
+ continue
+ if '-----' in section:
+ continue
+ if found_meta:
+ valid_sections.append(section)
+
+ if 'title' not in metadata:
+ print('warning: {} has no title'.format(fn))
+ for key in default_metadata:
+ if key not in metadata:
+ metadata[key] = default_metadata[key]
+ basename = os.path.basename(fn)
+ metadata['path'] = os.path.dirname(fn.replace(content_path, '')) + '/'
+ if basename == 'index.md':
+ metadata['url'] = metadata['path']
+ else:
+ metadata['url'] = metadata['path'] + basename.replace('.md', '') + '/'
+
+ if metadata['status'] == 'published|draft|private':
+ metadata['status'] = 'published'
+ metadata['authors'] = '<br>'.join(metadata['authors'].split(','))
+ return metadata, valid_sections
+
+def read_research_post_index():
+ posts = []
+ for fn in sorted(glob.glob(os.path.join(content_path, 'research/**/index.md'), recursive=True)):
+ metadata, valid_sections = read_metadata(fn)
+ if metadata is None or metadata['status'] == 'private' or metadata['status'] == 'draft':
+ continue
+ posts.append(metadata)
+ return posts
+
diff --git a/builder/paths.py b/builder/paths.py
new file mode 100644
index 00000000..356f2f3d
--- /dev/null
+++ b/builder/paths.py
@@ -0,0 +1,6 @@
+
+s3_site_path = "v1/site"
+s3_datasets_path = "v1" # datasets is already in the filename
+public_path = "../site/public"
+content_path = "../site/content"
+template_path = "../site/templates"
diff --git a/builder/s3.py b/builder/s3.py
new file mode 100644
index 00000000..7d4d52a0
--- /dev/null
+++ b/builder/s3.py
@@ -0,0 +1,55 @@
+import os
+import glob
+import boto3
+from paths import *
+
+session = boto3.session.Session()
+
+s3_client = session.client(
+ service_name='s3',
+ aws_access_key_id=os.getenv('S3_KEY'),
+ aws_secret_access_key=os.getenv('S3_SECRET'),
+ endpoint_url=os.getenv('S3_ENDPOINT'),
+ region_name=os.getenv('S3_REGION'),
+)
+
+def sync_directory(base_fn, s3_path, metadata):
+ fns = {}
+ for fn in glob.glob(os.path.join(base_fn, 'assets/*')):
+ fns[os.path.basename(fn)] = True
+
+ remote_path = s3_path + metadata['url']
+
+ directory = s3_client.list_objects(Bucket=os.getenv('S3_BUCKET'), Prefix=remote_path)
+ prefixes = []
+
+ if 'Contents' in directory:
+ for obj in directory['Contents']:
+ s3_fn = obj['Key']
+ fn = os.path.basename(s3_fn)
+ local_fn = os.path.join(base_fn, 'assets', fn)
+ if fn in fns:
+ del fns[fn]
+ if obj['LastModified'].timestamp() < os.path.getmtime(os.path.join(local_fn)):
+ print("s3 update {}".format(s3_fn))
+ client.upload_file(
+ local_fn,
+ os.getenv('S3_BUCKET'),
+ s3_fn,
+ ExtraArgs={ 'ACL': 'public-read' })
+ else:
+ print("s3 delete {}".format(s3_fn))
+ response = client.delete_object(
+ Bucket=os.getenv('S3_BUCKET'),
+ Key=s3_fn,
+ )
+
+ for fn in fns:
+ local_fn = os.path.join(base_fn, 'assets', fn)
+ s3_fn = os.path.join(remote_path, 'assets', fn)
+ print("s3 create {}".format(s3_fn))
+ s3_client.upload_file(
+ local_fn,
+ os.getenv('S3_BUCKET'),
+ s3_fn,
+ ExtraArgs={ 'ACL': 'public-read' })
diff --git a/scraper/builder.py b/scraper/builder.py
deleted file mode 100644
index c55b6dff..00000000
--- a/scraper/builder.py
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/python
-
-import os
-import glob
-import mistune
-from jinja2 import Environment, FileSystemLoader, select_autoescape
-
-public_path = "../site/public"
-content_path = "../site/content"
-template_path = "../site/templates"
-
-env = Environment(
- loader=FileSystemLoader(template_path),
- autoescape=select_autoescape([])
-)
-
-renderer = mistune.Renderer(escape=False)
-markdown = mistune.Markdown(renderer=renderer)
-
-def wide_section(line):
- return "<section class='wide'>" + markdown(line) + "</section>"
-
-def normal_section(lines):
- if len(lines):
- return "<section>" + markdown("\n\n".join(lines)) + "</section>"
- return ""
-
-def build_file(fn):
- print(fn)
- output_path = os.path.dirname(fn).replace(content_path, public_path)
- output_fn = os.path.join(output_path, "index.html")
- with open(fn, "r") as file:
- sections = file.read().split("\n\n")
- metadata = {}
- for line in sections[0].split("\n"):
- print(line)
- key, value = line.split(': ', 1)
- metadata[key.lower()] = value
-
- groups = []
- current_group = []
- for section in sections[1:]:
- if '![wide]' in section:
- groups.append(normal_section(current_group))
- groups.append(wide_section(section))
- current_group = []
- else:
- current_group.append(section)
- groups.append(normal_section(current_group))
- content = "".join(groups)
-
- if 'blog/' in fn:
- template = env.get_template("blog.html")
- else:
- template = env.get_template("page.html")
- html = template.render(metadata=metadata, content=content)
-
- os.makedirs(output_path, exist_ok=True)
- with open(output_fn, "w") as file:
- file.write(html)
-
-def build_site():
- print("Building...")
- for fn in glob.iglob(os.path.join(content_path, "**/index.txt"), recursive=True):
- print(fn)
- build_file(fn)
-
-if __name__ == '__main__':
- build_site()
diff --git a/site/assets/css/css.css b/site/assets/css/css.css
index d7db0e1f..c9d9b029 100644
--- a/site/assets/css/css.css
+++ b/site/assets/css/css.css
@@ -45,11 +45,13 @@ header .site_name {
color: #fff;
}
header .sub {
- color: #666;
- font-size: 10pt;
margin-left: 4px;
margin-top: 2px;
- transition: color 0.1s cubic-bezier(0,1,1,1);
+ transition: color 0.1s cubic-bezier(0,0,1,1);
+}
+.sub {
+ color: #666;
+ font-size: 10pt;
}
.desktop header .slogan:hover .site_name {
color: #fff;
@@ -68,7 +70,7 @@ header .links a {
text-decoration: none;
text-transform: uppercase;
margin-right: 32px;
- transition: color 0.1s cubic-bezier(0,1,1,1), border-color 0.1s cubic-bezier(0,1,1,1);
+ transition: color 0.1s cubic-bezier(0,0,1,1), border-color 0.1s cubic-bezier(0,0,1,1);
border-bottom: 1px solid rgba(255,255,255,0);
}
header .links a.active {
@@ -102,7 +104,7 @@ footer > div {
footer a {
display: inline-block;
color: #888;
- transition: color 0.2s cubic-bezier(0,1,1,1);
+ transition: color 0.2s cubic-bezier(0,0,1,1);
margin-right: 5px;
}
footer a:hover {
@@ -119,13 +121,20 @@ h1 {
padding: 0;
}
h3 {
+ margin: 0 0 10px 0;
+ padding: 0;
+ font-size: 11pt;
+ font-weight: 500;
+}
+
+th, .gray, h3 {
font-family: 'Roboto Mono', monospace;
font-weight: 400;
- font-size: 10pt;
text-transform: uppercase;
color: #666;
- margin: 0 0 10px 0;
- padding: 0;
+}
+th, .gray {
+ font-size: 9pt;
}
/* content */
@@ -148,6 +157,24 @@ section {
p {
margin: 0 0 20px 0;
}
+.content a {
+ color: #ddd;
+ transition: color 0.2s cubic-bezier(0,0,1,1);
+}
+.content a:hover {
+ color: #fff;
+}
+code {
+ display: block;
+ font-family: 'Roboto Mono', monospace;
+ font-size: 9pt;
+ max-height: 400px;
+ max-width: 640px;
+ padding: 2px 5px;
+ background: rgba(255,255,255,0.1);
+}
+
+/* top of post metadata */
.meta {
display: flex;
@@ -164,9 +191,9 @@ p {
font-size: 9pt;
padding-bottom: 4px;
}
-.gray {
- font-family: 'Roboto Mono', monospace;
- font-weight: 400;
- text-transform: uppercase;
- color: #666;
-}
+
+/* blogpost index */
+
+.blogposts div {
+ margin-bottom: 5px;
+} \ No newline at end of file
diff --git a/site/content b/site/content
new file mode 120000
index 00000000..80b3a367
--- /dev/null
+++ b/site/content
@@ -0,0 +1 @@
+/Users/user/Nextcloud/megapixels/website/pages/ \ No newline at end of file
diff --git a/site/content/about/index.txt b/site/content/about/index.txt
deleted file mode 100644
index 36719d7c..00000000
--- a/site/content/about/index.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Title: About
-
-# About
-
-### The darkside of datasets
-
-MegaPixels is a project about the darkside of datasets. It's an exploration of what happens when you post photos online, and how they are used.
-
-In an era of exuberant data collection and analysis, social media has become the superfood of Artificial Intelligence. But what about the creators and individuals behind the data? What about their stories?
-
-During the last 20 yers etc
-
diff --git a/site/content/blog/2018-12-01-intro/index.txt b/site/content/blog/2018-12-01-intro/index.txt
deleted file mode 100644
index f56a99f3..00000000
--- a/site/content/blog/2018-12-01-intro/index.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Title: Welcome to the blog!
-Author: Adam Harvey
-Date: 2018-12-01
-
-Lorem ipsum dolor sit amet is more than just dummy test. It is a way of experiencing the world, an exciting clue to the mystery of being. A key to pondering its weighty thesis - that no one desires pain, but might undergo something painful for greater benefit - has been a key to understanding the nature of humanity since Cicero spoke those words thousands of years ago. And the world keeps on spinning like a top, folks, and we all keep going round on this crazy adventure called life.
-
-Let me tell you a secret - privacy is contagious! Don't believe me? Get up and look away from the computer right now. Do it! Walk outside! Are you still reading this? No, seriously go outside, and await further instructions!
-
-Are they gone? Let's wait another minute until we can be sure the reader is gone and it's just me here, writing for my own benefit. Whew, deep breath - not! These words really do exist in a vacuum. I literally have my eyes closed right now.
-
-Dummy text? Generation 2.0 deserves better! We will not accept the flaccid filler text of yesteryear, no, we want it all, custom bespoke dummy text, hand-crafted with love and some good old fashioned ingenuity. Don't believe me? Get up right now from your chair and go outside. I'll wait. Ok. Are they gone? Good ok now that it's definitely just us, let me let you in on a little secret. Shh, promise not to tell?
-
-The secret can be found in the next blog post.
diff --git a/site/content/blog/2018-12-02-second-blog-post/index.txt b/site/content/blog/2018-12-02-second-blog-post/index.txt
deleted file mode 100644
index c17e9cd0..00000000
--- a/site/content/blog/2018-12-02-second-blog-post/index.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-Title: Second post!
-Author: Adam Harvey
-Date: 2018-12-02
-
-# H1
-## H2
-### H3
-#### H4
-
-I declare a thumb war. Ha!
-
-Let's get one thing straight. [I'm an inline-style link](https://www.google.com). URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or <http://www.example.com> and sometimes example.com. We have links, but can we break the chain?
-
-Face it. Time to face facts. Look. I'm not going to say this more than once, so listen up. Listen up. Get real. Get ready. This isn't going to be easy. This isn't going to be the easiest **bold text** _italic text_ ~~strikethrough~~
-
-1. Potato
-2. Potato
- * Un-related sub-potato
-3. Potato
-4. Potato
-
-```
-print("blah")
-print "i'm a python 2 style print statement"
-i<span class="color: red">'m a syntax error</span>
-```
-
-![hmf](vision.png "Computer vision at its finest, folks!")
-![blah](vision.png "This image has been repeated twice but it shouldn't MATTER!")
-
-## Hell Yeah
-
-| Tables | Are | Cool |
-| ------------- |:-------------:| -----:|
-| col 3 is | right-aligned | $1600 |
-| col 2 is | centered | $12 |
-| zebra stripes | are neat | $1 |
-
-> Blockquotes are very handy in email to emulate reply text.
-> This line is part of the same quote.
-
-Quote break.
-
-> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ **Markdown** into a blockquote. Now no reason to get **swervy** when your *orange* attitude is what's making the text _wrap_.
-
-<div class="test">And did I mention contain HTML??!!!</div>
-
-<script type="text/javascript">document.querySelector('.test').style.backgroundColor = 'red'</script>
-
----
-
-That's it!
-
-![wide](wideimage.jpg "This image should be wide. I mean REALLY wide. Picture somebody who drives a pickup truck and who purposefully parks it to take up two or even three spaces. They're coming out of the Costco now with a whole lotta paper towels and mustard on a giant pallet. Power tools deluxe, fasteners, drywall, everything you need to build a shed.")
diff --git a/site/content/blog/2018-12-02-second-blog-post/vision.png b/site/content/blog/2018-12-02-second-blog-post/vision.png
deleted file mode 100644
index d266cb43..00000000
--- a/site/content/blog/2018-12-02-second-blog-post/vision.png
+++ /dev/null
Binary files differ
diff --git a/site/content/blog/2018-12-02-second-blog-post/wideimage.jpg b/site/content/blog/2018-12-02-second-blog-post/wideimage.jpg
deleted file mode 100644
index f337f337..00000000
--- a/site/content/blog/2018-12-02-second-blog-post/wideimage.jpg
+++ /dev/null
Binary files differ
diff --git a/site/public/about/credits/index.html b/site/public/about/credits/index.html
new file mode 100644
index 00000000..0b3f9db8
--- /dev/null
+++ b/site/public/about/credits/index.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Project Team Credits" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><h1>Credits</h1>
+<p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/site/about/assets/test.jpg" alt="alt text"></p>
+<ul>
+<li>MegaPixels by Adam Harvey</li>
+<li>Made with support from Mozilla</li>
+<li>Site developed by Jules Laplace</li>
+<li>Design and graphics: Adam Harvey</li>
+<li>Research assistants: Berit Gilma</li>
+</ul>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/about/disclaimer/index.html b/site/public/about/disclaimer/index.html
new file mode 100644
index 00000000..1c14a97c
--- /dev/null
+++ b/site/public/about/disclaimer/index.html
@@ -0,0 +1,56 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Disclaimer" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><h1>Disclaimer</h1>
+<p>Last updated: December 04, 2018</p>
+<p>The information contained on MegaPixels.cc website (the "Service") is for academic and artistic purposes only.</p>
+<p>MegaPixels.cc assumes no responsibility for errors or omissions in the contents on the Service.</p>
+<p>In no event shall MegaPixels.cc be liable for any special, direct, indirect, consequential, or incidental damages or any damages whatsoever, whether in an action of contract, negligence or other tort, arising out of or in connection with the use of the Service or the contents of the Service. MegaPixels.cc reserves the right to make additions, deletions, or modification to the contents on the Service at any time without prior notice.</p>
+<h2>External links disclaimer</h2>
+<p>MegaPixels.cc website may contain links to external websites that are not provided or maintained by or in any way affiliated with MegaPixels.cc</p>
+<p>Please note that the MegaPixels.cc does not guarantee the accuracy, relevance, timeliness, or completeness of any information on these external websites.</p>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/about/index.html b/site/public/about/index.html
index 49fa726c..8441e317 100644
--- a/site/public/about/index.html
+++ b/site/public/about/index.html
@@ -3,6 +3,9 @@
<head>
<title>MegaPixels</title>
<meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Project Team Credits" />
+ <meta name="referrer" content="no-referrer" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel='stylesheet' href='/assets/css/fonts.css' />
<link rel='stylesheet' href='/assets/css/css.css' />
@@ -17,30 +20,35 @@
<div class='links'>
<a href="/search">Face Search</a>
<a href="/datasets">Datasets</a>
- <a href="/blog">Blog</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
<a href="/about">About</a>
</div>
</header>
<div class="content">
- <section><h1>About</h1>
-<h3>The darkside of datasets</h3>
-<p>MegaPixels is a project about the darkside of datasets. It's an exploration of what happens when you post photos online, and how they are used.</p>
-<p>In an era of exuberant data collection and analysis, social media has become the superfood of Artificial Intelligence. But what about the creators and individuals behind the data? What about their stories?</p>
-<p>During the last 20 yers etc</p>
+ <section><p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/site/about/assets/test.jpg" alt="alt text"></p>
+<ul>
+<li>MegaPixels by Adam Harvey</li>
+<li>Made with support from Mozilla</li>
+<li>Site developed by Jules Laplace</li>
+<li>Design and graphics: Adam Harvey</li>
+<li>Research assistants: Berit Gilma</li>
+</ul>
</section>
</div>
<footer>
<div>
<a href="/">MegaPixels.cc</a>
- <a href="/legal/terms/">Terms of Use</a>
- <a href="/legal/privacy/">Privacy</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
<a href="/about/">About</a>
<a href="/about/team/">Team</a>
</div>
<div>
- MegaPixels &copy;2017-19 Adam R. Harvey / <a href="https://ahprojects.com">ahprojects.com</a>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
</div>
</footer>
</body>
diff --git a/site/public/about/press/index.html b/site/public/about/press/index.html
new file mode 100644
index 00000000..76ba90e4
--- /dev/null
+++ b/site/public/about/press/index.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels in The News" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><h1>Press</h1>
+<p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/site/about/assets/test.jpg" alt="alt text"></p>
+<ul>
+<li>Aug 22, 2018: "Transgender YouTubers had their videos grabbed to train facial recognition software" by James Vincent <a href="https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset">https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset</a></li>
+<li>Aug 22, 2018: "Transgender YouTubers had their videos grabbed to train facial recognition software" by James Vincent <a href="https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset">https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset</a></li>
+<li>Aug 22, 2018: "Transgender YouTubers had their videos grabbed to train facial recognition software" by James Vincent <a href="https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset">https://www.theverge.com/2017/8/22/16180080/transgender-youtubers-ai-facial-recognition-dataset</a></li>
+</ul>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/about/privacy/index.html b/site/public/about/privacy/index.html
new file mode 100644
index 00000000..21fd2255
--- /dev/null
+++ b/site/public/about/privacy/index.html
@@ -0,0 +1,134 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Privacy Policy" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><h1>Privacy Policy</h1>
+<p>A summary of our privacy policy is as follows:</p>
+<p>The MegaPixels site does not use any analytics programs or collect any data besides the necessary IP address of your connection, which are deleted every 30 days and used only for security and to prevent misuse.</p>
+<p>The image processing sections of the site do not collect any data whatsoever. All processing takes place in temporary memory (RAM) and then is displayed back to the user over a SSL secured HTTPS connection. It is the sole responsibility of the user whether they discard, by closing the page, or share their analyzed information and any potential consequences that may arise from doing so.</p>
+<hr>
+<p>A more complete legal version is below:</p>
+<p><strong>This is a boilerplate Privacy policy from <a href="https://termsfeed.com/">https://termsfeed.com/</a></strong></p>
+<p><strong>Needs to be reviewed</strong></p>
+<p>Effective date: December 04, 2018</p>
+<p>megapixels.cc ("us", "we", or "our") operates the WebsiteName website (hereinafter referred to as the "Service").</p>
+<p>This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data.</p>
+<p>We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, the terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, accessible from WebsiteName</p>
+<h2>Definitions</h2>
+<p><strong>Service</strong></p>
+<p>Service is the MegaPixels website operated by megapixels.cc</p>
+<p><strong>Personal Data</strong></p>
+<p>Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).</p>
+<p><strong>Usage Data</strong></p>
+<p>Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself</p>
+<h2>Information Collection and Use</h2>
+<p>We collect several different types of information for various purposes to provide and improve our Service to you.</p>
+<h3>Types of Data Collected</h3>
+<h4>Personal Data</h4>
+<p>While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you ("Personal Data"). Personally identifiable information may include, but is not limited to:</p>
+<ul>
+<li>Cookies and Usage Data</li>
+</ul>
+<h4>Usage Data</h4>
+<p>We may also collect information how the Service is accessed and used ("Usage Data"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.</p>
+<h4>Tracking &amp; Cookies Data</h4>
+<p>We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.
+Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service.</p>
+<p>You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.
+Examples of Cookies we use:</p>
+<ul>
+<li><strong>Session Cookies.</strong> We use Session Cookies to operate our Service.</li>
+<li><strong>Preference Cookies.</strong> We use Preference Cookies to remember your preferences and various settings.</li>
+<li><strong>Security Cookies.</strong> We use Security Cookies for security purposes.</li>
+</ul>
+<h2>Use of Data</h2>
+<p>megapixels.cc uses the collected data for various purposes:</p>
+<ul>
+<li>To provide and maintain the Service</li>
+<li>To notify you about changes to our Service</li>
+<li>To allow you to participate in interactive features of our Service when you choose to do so</li>
+<li>To provide customer care and support</li>
+<li>To provide analysis or valuable information so that we can improve the Service</li>
+<li>To monitor the usage of the Service</li>
+<li>To detect, prevent and address technical issues</li>
+</ul>
+<h2>Transfer Of Data</h2>
+<p>Your information, including Personal Data, may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.</p>
+<p>If you are located outside Germany and choose to provide information to us, please note that we transfer the data, including Personal Data, to Germany and process it there.
+Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.
+megapixels.cc will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.</p>
+<h2>Disclosure Of Data</h2>
+<h3>Legal Requirements</h3>
+<p>megapixels.cc may disclose your Personal Data in the good faith belief that such action is necessary to:</p>
+<p><ul></p>
+<ul>
+<li>To comply with a legal obligation</li>
+<li>To protect and defend the rights or property of megapixels.cc</li>
+<li>To prevent or investigate possible wrongdoing in connection with the Service</li>
+<li>To protect the personal safety of users of the Service or the public</li>
+<li>To protect against legal liability</li>
+</ul>
+<h2>Security of Data</h2>
+<p>The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.</p>
+<h2>Service Providers</h2>
+<p>We may employ third party companies and individuals to facilitate our Service ("Service Providers"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.</p>
+<p>These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.</p>
+<h2>Links to Other Sites</h2>
+<p>Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.
+We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.</p>
+<h2>Children's Privacy</h2>
+<p>Our Service does not address anyone under the age of 18 ("Children").</p>
+<p>We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.</p>
+<h2>Changes to This Privacy Policy</h2>
+<p>We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.
+We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.
+You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.</p>
+<h2>Contact Us</h2>
+<p>If you have any questions about this Privacy Policy, please contact us:</p>
+<ul>
+<li>By visiting this page on our website: <a href="https://megapixels.cc/contact">https://megapixels.cc/contact</a></li>
+</ul>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/about/style/index.html b/site/public/about/style/index.html
new file mode 100644
index 00000000..2e0c80d0
--- /dev/null
+++ b/site/public/about/style/index.html
@@ -0,0 +1,86 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Style" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/site/about/assets/test.jpg" alt="Alt text here"></p>
+<h1>Header 1</h1>
+<h2>Header 2</h2>
+<h3>Header 3</h3>
+<h4>Header 4</h4>
+<h5>Header 5</h5>
+<h6>Header 6</h6>
+<p><strong>Bold text</strong>, <em>italic text</em>, <strong><em>bold italic text</em></strong></p>
+<p>At vero eos et et iusto qui blanditiis <a href="#">praesentium voluptatum</a> deleniti atque corrupti<sup class="footnote-ref" id="fnref-1"><a href="#fn-1">1</a></sup>, quos dolores et quas molestias excepturi sint, obcaecati cupiditate non-provident, similique sunt in culpa, qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio<sup class="footnote-ref" id="fnref-2"><a href="#fn-2">2</a></sup>. Nam libero tempore, cum soluta nobis est eligendi optio, cumque nihil impedit, quo minus id, quod maxime placeat, facere possimus, omnis voluptas assumenda est, omnis dolor repellendus<sup class="footnote-ref" id="fnref-3"><a href="#fn-3">3</a></sup>.</p>
+<ul>
+<li>Sed ut perspiciatis, unde omnis iste natus error sit voluptatem accusantium doloremque laudantium</li>
+<li>Totam rem aperiam eaque ipsa, quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt, explicabo</li>
+<li>Nemo enim ipsam voluptatem, quia voluptas sit, aspernatur aut</li>
+<li>Odit aut fugit, sed quia consequuntur magni dolores eos</li>
+<li>Qui ratione voluptatem sequi nesciunt, neque porro quisquam </li>
+</ul>
+<blockquote><p>est, qui dolorem ipsum, quia dolor sit amet consectetur adipisci[ng] velit, sed quia non-numquam [do] eius modi tempora inci[di]dunt, ut labore et dolore magnam aliquam quaerat voluptatem.</p>
+</blockquote>
+<p>Inline <code>code</code> has <code>back-ticks around</code> it.</p>
+<pre><code class="lang-javascript">var s = &quot;JavaScript syntax highlighting&quot;;
+alert(s);
+</code></pre>
+<pre><code class="lang-python">s = &quot;Python syntax highlighting&quot;
+print(s)
+</code></pre>
+<pre><code>No language indicated, so no syntax highlighting.
+But let's throw in a &lt;b&gt;tag&lt;/b&gt;.
+</code></pre>
+<p>Horizontal rule</p>
+<hr>
+<p>Citations below here</p>
+<div class="footnotes">
+<hr>
+<ol><li id="fn-1"><p>First source<a href="#fnref-1" class="footnote">&#8617;</a></p></li>
+<li id="fn-2"><p>Second source<a href="#fnref-2" class="footnote">&#8617;</a></p></li>
+<li id="fn-3"><p>Third source<a href="#fnref-3" class="footnote">&#8617;</a></p></li>
+</ol>
+</div>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/about/terms/index.html b/site/public/about/terms/index.html
new file mode 100644
index 00000000..73155546
--- /dev/null
+++ b/site/public/about/terms/index.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="MegaPixels Terms of Use and Privacy Policy" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><p>Terms and Conditions ("Terms")</p>
+<p>Last updated: December 04, 2018</p>
+<p>Please read these Terms and Conditions ("Terms", "Terms and Conditions") carefully before using the MegaPixels website (the "Service") operated by megapixels.cc ("us", "we", or "our").</p>
+<p>Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms.</p>
+<p>By accessing or using the Service you agree to be bound by these Terms. If you disagree with any part of the terms then you may not access the Service.</p>
+<h2>Links To Other Web Sites</h2>
+<p>Our Service may contain links to third-party web sites or services that are not owned or controlled by megapixels.cc.</p>
+<p>megapixels.cc has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that megapixels.cc shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with use of or reliance on any such content, goods or services available on or through any such web sites or services.</p>
+<p>We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit.</p>
+<h2>Termination</h2>
+<p>We may terminate or suspend access to our Service immediately, without prior notice or liability, for any reason whatsoever, including without limitation if you breach the Terms.</p>
+<p>All provisions of the Terms which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability.</p>
+<h2>Governing Law</h2>
+<p>These Terms shall be governed and construed in accordance with the laws of Berlin, Germany, without regard to its conflict of law provisions.</p>
+<p>Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect. These Terms constitute the entire agreement between us regarding our Service, and supersede and replace any prior agreements we might have between us regarding the Service.</p>
+<h2>Changes</h2>
+<p>We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.</p>
+<p>By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.</p>
+<h2>Contact Us</h2>
+<p>If you have any questions about these Terms, please contact us.</p>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/blog/2018-12-01-intro/index.html b/site/public/blog/2018-12-01-intro/index.html
deleted file mode 100644
index c92ea2fd..00000000
--- a/site/public/blog/2018-12-01-intro/index.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!doctype html>
-<html>
-<head>
- <title>MegaPixels</title>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <link rel='stylesheet' href='/assets/css/fonts.css' />
- <link rel='stylesheet' href='/assets/css/css.css' />
-</head>
-<body>
- <header>
- <a class='slogan' href="/">
- <div class='logo'></div>
- <div class='site_name'>MegaPixels</div>
- <span class='sub'>The Darkside of Datasets</span>
- </a>
- <div class='links'>
- <a href="/search">Face Search</a>
- <a href="/datasets">Datasets</a>
- <a href="/blog">Blog</a>
- <a href="/about">About</a>
- </div>
- </header>
- <div class="content">
-
- <section>
- <h1>Welcome to the blog!</h1>
- <div class='meta'>
- <div>
- <div class='gray'>Posted</div>
- <div>2018-12-01</div>
- </div>
- <div>
- <div class='gray'>By</div>
- <div>Adam Harvey</div>
- </div>
-
- </div>
- </section>
- <section><p>Lorem ipsum dolor sit amet is more than just dummy test. It is a way of experiencing the world, an exciting clue to the mystery of being. A key to pondering its weighty thesis - that no one desires pain, but might undergo something painful for greater benefit - has been a key to understanding the nature of humanity since Cicero spoke those words thousands of years ago. And the world keeps on spinning like a top, folks, and we all keep going round on this crazy adventure called life.</p>
-<p>Let me tell you a secret - privacy is contagious! Don't believe me? Get up and look away from the computer right now. Do it! Walk outside! Are you still reading this? No, seriously go outside, and await further instructions!</p>
-<p>Are they gone? Let's wait another minute until we can be sure the reader is gone and it's just me here, writing for my own benefit. Whew, deep breath - not! These words really do exist in a vacuum. I literally have my eyes closed right now.</p>
-<p>Dummy text? Generation 2.0 deserves better! We will not accept the flaccid filler text of yesteryear, no, we want it all, custom bespoke dummy text, hand-crafted with love and some good old fashioned ingenuity. Don't believe me? Get up right now from your chair and go outside. I'll wait. Ok. Are they gone? Good ok now that it's definitely just us, let me let you in on a little secret. Shh, promise not to tell?</p>
-<p>The secret can be found in the next blog post.</p>
-</section>
-
- </div>
- <footer>
- <div>
- <a href="/">MegaPixels.cc</a>
- <a href="/legal/terms/">Terms of Use</a>
- <a href="/legal/privacy/">Privacy</a>
- <a href="/about/">About</a>
- <a href="/about/team/">Team</a>
- </div>
- <div>
- MegaPixels &copy;2017-19 Adam R. Harvey / <a href="https://ahprojects.com">ahprojects.com</a>
- </div>
- </footer>
-</body>
-<script src="/assets/js/app/site.js"></script>
-</html> \ No newline at end of file
diff --git a/site/public/blog/2018-12-02-second-blog-post/index.html b/site/public/blog/2018-12-02-second-blog-post/index.html
deleted file mode 100644
index 5852ebe7..00000000
--- a/site/public/blog/2018-12-02-second-blog-post/index.html
+++ /dev/null
@@ -1,114 +0,0 @@
-<!doctype html>
-<html>
-<head>
- <title>MegaPixels</title>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
- <link rel='stylesheet' href='/assets/css/fonts.css' />
- <link rel='stylesheet' href='/assets/css/css.css' />
-</head>
-<body>
- <header>
- <a class='slogan' href="/">
- <div class='logo'></div>
- <div class='site_name'>MegaPixels</div>
- <span class='sub'>The Darkside of Datasets</span>
- </a>
- <div class='links'>
- <a href="/search">Face Search</a>
- <a href="/datasets">Datasets</a>
- <a href="/blog">Blog</a>
- <a href="/about">About</a>
- </div>
- </header>
- <div class="content">
-
- <section>
- <h1>Second post!</h1>
- <div class='meta'>
- <div>
- <div class='gray'>Posted</div>
- <div>2018-12-02</div>
- </div>
- <div>
- <div class='gray'>By</div>
- <div>Adam Harvey</div>
- </div>
-
- </div>
- </section>
- <section><h1>H1</h1>
-<h2>H2</h2>
-<h3>H3</h3>
-<h4>H4</h4>
-<p>I declare a thumb war. Ha!</p>
-<p>Let's get one thing straight. <a href="https://www.google.com">I'm an inline-style link</a>. URLs and URLs in angle brackets will automatically get turned into links. <a href="http://www.example.com">http://www.example.com</a> or <a href="http://www.example.com">http://www.example.com</a> and sometimes example.com. We have links, but can we break the chain?</p>
-<p>Face it. Time to face facts. Look. I'm not going to say this more than once, so listen up. Listen up. Get real. Get ready. This isn't going to be easy. This isn't going to be the easiest <strong>bold text</strong> <em>italic text</em> <del>strikethrough</del></p>
-<ol>
-<li>Potato</li>
-<li>Potato<ul>
-<li>Un-related sub-potato</li>
-</ul>
-</li>
-<li>Potato</li>
-<li>Potato</li>
-</ol>
-<pre><code>print("blah")
-print "i'm a python 2 style print statement"
-i&lt;span class="color: red"&gt;'m a syntax error&lt;/span&gt;
-</code></pre>
-<p><img src="vision.png" alt="hmf" title="Computer vision at its finest, folks!">
-<img src="vision.png" alt="blah" title="This image has been repeated twice but it shouldn&#39;t MATTER!"></p>
-<h2>Hell Yeah</h2>
-<table>
-<thead><tr>
-<th>Tables</th>
-<th style="text-align:center">Are</th>
-<th style="text-align:right">Cool</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>col 3 is</td>
-<td style="text-align:center">right-aligned</td>
-<td style="text-align:right">$1600</td>
-</tr>
-<tr>
-<td>col 2 is</td>
-<td style="text-align:center">centered</td>
-<td style="text-align:right">$12</td>
-</tr>
-<tr>
-<td>zebra stripes</td>
-<td style="text-align:center">are neat</td>
-<td style="text-align:right">$1</td>
-</tr>
-</tbody>
-</table>
-<blockquote><p>Blockquotes are very handy in email to emulate reply text.
-This line is part of the same quote.</p>
-</blockquote>
-<p>Quote break.</p>
-<blockquote><p>This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can <em>put</em> <strong>Markdown</strong> into a blockquote. Now no reason to get <strong>swervy</strong> when your <em>orange</em> attitude is what's making the text <em>wrap</em>.</p>
-</blockquote>
-<div class="test">And did I mention contain HTML??!!!</div><script type="text/javascript">document.querySelector('.test').style.backgroundColor = 'red'</script><hr>
-<p>That's it!</p>
-</section><section class='wide'><p><img src="wideimage.jpg" alt="wide" title="This image should be wide. I mean REALLY wide. Picture somebody who drives a pickup truck and who purposefully parks it to take up two or even three spaces. They&#39;re coming out of the Costco now with a whole lotta paper towels and mustard on a giant pallet. Power tools deluxe, fasteners, drywall, everything you need to build a shed."></p>
-</section>
-
- </div>
- <footer>
- <div>
- <a href="/">MegaPixels.cc</a>
- <a href="/legal/terms/">Terms of Use</a>
- <a href="/legal/privacy/">Privacy</a>
- <a href="/about/">About</a>
- <a href="/about/team/">Team</a>
- </div>
- <div>
- MegaPixels &copy;2017-19 Adam R. Harvey / <a href="https://ahprojects.com">ahprojects.com</a>
- </div>
- </footer>
-</body>
-<script src="/assets/js/app/site.js"></script>
-</html> \ No newline at end of file
diff --git a/site/public/datasets/lfw/index.html b/site/public/datasets/lfw/index.html
new file mode 100644
index 00000000..8455bc60
--- /dev/null
+++ b/site/public/datasets/lfw/index.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="One of the most widely used facial recognition datasets." />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><ul>
+<li>Created 2007</li>
+<li>Images 13,233</li>
+<li>People 5,749</li>
+<li>Created From Yahoo News images</li>
+<li>Search available <a href="#">Searchable</a></li>
+</ul>
+<p>Labeled Faces in The Wild is amongst the most widely used facial recognition training datasets in the world and is the first dataset of its kind to be created entirely from Internet photos. It includes 13,233 images of 5,749 people downloaded from the Internet, otherwise referred to by researchers as “The Wild”.</p>
+<p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/datasets/lfw/assets/lfw_sample.jpg" alt="Eight out of 5,749 people in the Labeled Faces in the Wild dataset. The face recognition training dataset is created entirely from photos downloaded from the Internet."></p>
+<h2>INTRO</h2>
+<p>It began in 2002. Researchers at University of Massachusetts Amherst were developing algorithms for facial recognition and they needed more data. Between 2002-2004 they scraped Yahoo News for images of public figures. Two years later they cleaned up the dataset and repackaged it as Labeled Faces in the Wild (LFW).</p>
+<p>Since then the LFW dataset has become one of the most widely used datasets used for evaluating face recognition algorithms. The associated research paper “Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments” has been cited 996 times reaching 45 different countries throughout the world.</p>
+<p>The faces come from news stories and are mostly celebrities from the entertainment industry, politicians, and villains. It’s a sampling of current affairs and breaking news that has come to pass. The images, detached from their original context now server a new purpose: to train, evaluate, and improve facial recognition.</p>
+<p>As the most widely used facial recognition dataset, it can be said that each individual in LFW has, in a small way, contributed to the current state of the art in facial recognition surveillance. John Cusack, Julianne Moore, Barry Bonds, Osama bin Laden, and even Moby are amongst these biometric pillars, exemplar faces provided the visual dimensions of a new computer vision future.</p>
+<p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/datasets/lfw/assets/lfw_a_to_c.jpg" alt="From Aaron Eckhart to Zydrunas Ilgauskas. A small sampling of the LFW dataset"></p>
+<p>In addition to commercial use as an evaluation tool, alll of the faces in LFW dataset are prepackaged into a popular machine learning code framework called scikit-learn.</p>
+<h2>Usage</h2>
+<pre><code class="lang-python">#!/usr/bin/python
+from matplotlib import plt
+from sklearn.datasets import fetch_lfw_people
+lfw_people = fetch_lfw_people()
+lfw_person = lfw_people[0]
+plt.imshow(lfw_person)
+</code></pre>
+<h2>Commercial Use</h2>
+<p>The LFW dataset is used by numerous companies for benchmarking algorithms and in some cases training. According to the benchmarking results page <sup class="footnote-ref" id="fnref-lfw_results"><a href="#fn-lfw_results">1</a></sup> provided by the authors, over 2 dozen companies have contributed their benchmark results</p>
+<p>(Jules: this load the <code>assets/lfw_vendor_results.csv</code>)</p>
+<p>In benchmarking, companies use a dataset to evaluate their algorithms which are typically trained on other data. After training, researchers will use LFW as a benchmark to compare results with other algorithms.</p>
+<p>For example, Baidu (est. net worth $13B) uses LFW to report results for their "Targeting Ultimate Accuracy: Face Recognition via Deep Embedding". According to the three Baidu researchers who produced the paper:</p>
+<blockquote><p>LFW has been the most popular evaluation benchmark for face recognition, and played a very important role in facilitating the face recognition society to improve algorithm. <sup class="footnote-ref" id="fnref-baidu_lfw"><a href="#fn-baidu_lfw">2</a></sup>.</p>
+</blockquote>
+<h2>Citations</h2>
+<table>
+<thead><tr>
+<th style="text-align:left">Title</th>
+<th style="text-align:left">Organization</th>
+<th style="text-align:left">Country</th>
+<th style="text-align:left">Type</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:left">3D-aided face recognition from videos</td>
+<td style="text-align:left">University of Lyon</td>
+<td style="text-align:left">France</td>
+<td style="text-align:left">edu</td>
+</tr>
+<tr>
+<td style="text-align:left">A Community Detection Approach to Cleaning Extremely Large Face Database</td>
+<td style="text-align:left">National University of Defense Technology, China</td>
+<td style="text-align:left">China</td>
+<td style="text-align:left">edu</td>
+</tr>
+</tbody>
+</table>
+<h2>Conclusion</h2>
+<p>The LFW face recognition training and evaluation dataset is a historically important face dataset as it was the first popular dataset to be created entirely from Internet images, paving the way for a global trend towards downloading anyone’s face from the Internet and adding it to a dataset. As will be evident with other datasets, LFW’s approach has now become the norm.</p>
+<p>For all the 5,000 people in this datasets, their face is forever a part of facial recognition history. It would be impossible to remove anyone from the dataset because it is so ubiquitous. For their rest of the lives and forever after, these 5,000 people will continue to be used for training facial recognition surveillance.</p>
+<div class="footnotes">
+<hr>
+<ol><li id="fn-lfw_results"><p>"LFW Results". Accessed Dec 3, 2018. <a href="http://vis-www.cs.umass.edu/lfw/results.html">http://vis-www.cs.umass.edu/lfw/results.html</a><a href="#fnref-lfw_results" class="footnote">&#8617;</a></p></li>
+<li id="fn-baidu_lfw"><p>"Chinese tourist town uses face recognition as an entry pass". New Scientist. November 17, 2016. <a href="https://www.newscientist.com/article/2113176-chinese-tourist-town-uses-face-recognition-as-an-entry-pass/">https://www.newscientist.com/article/2113176-chinese-tourist-town-uses-face-recognition-as-an-entry-pass/</a><a href="#fnref-baidu_lfw" class="footnote">&#8617;</a></p></li>
+</ol>
+</div>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/datasets/vgg_faces2/index.html b/site/public/datasets/vgg_faces2/index.html
new file mode 100644
index 00000000..19efbbbc
--- /dev/null
+++ b/site/public/datasets/vgg_faces2/index.html
@@ -0,0 +1,69 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey" />
+ <meta name="description" content="" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section><ul>
+<li>Created 2007</li>
+<li>Images 13,233</li>
+<li>People 5,749</li>
+<li>Created From Yahoo News images</li>
+<li>Search available <a href="#">Searchable</a></li>
+</ul>
+<p>Labeled Faces in The Wild is amongst the most widely used facial recognition training datasets in the world and is the first dataset of its kind to be created entirely from Internet photos. It includes 13,233 images of 5,749 people downloaded from the Internet, otherwise referred to by researchers as “The Wild”.</p>
+<p><img src="https://nyc3.digitaloceanspaces.com/megapixels/v1/datasets/vgg_faces2/datasets/lfw/identity_grid_01.jpg" alt="Eight out of 5,749 people in the Labeled Faces in the Wild dataset. The face recognition training dataset is created entirely from photos downloaded from the Internet."></p>
+<h2>INTRO</h2>
+<p>It began in 2002. Researchers at University of Massachusetts Amherst were developing algorithms for facial recognition and they needed more data. Between 2002-2004 they scraped Yahoo News for images of public figures. Two years later they cleaned up the dataset and repackaged it as Labeled Faces in the Wild (LFW).</p>
+<p>Since then the LFW dataset has become one of the most widely used datasets used for evaluating face recognition algorithms. The associated research paper “Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments” has been cited 996 times reaching 45 different countries throughout the world.</p>
+<p>The faces come from news stories and are mostly celebrities from the entertainment industry, politicians, and villains. It’s a sampling of current affairs and breaking news that has come to pass. The images, detached from their original context now server a new purpose: to train, evaluate, and improve facial recognition.</p>
+<p>As the most widely used facial recognition dataset, it can be said that each individual in LFW has, in a small way, contributed to the current state of the art in facial recognition surveillance. John Cusack, Julianne Moore, Barry Bonds, Osama bin Laden, and even Moby are amongst these biometric pillars, exemplar faces provided the visual dimensions of a new computer vision future.</p>
+<h2>Commercial Use</h2>
+<p>The dataset is used by numerous companies for benchmarking algorithms. According to the benchmarking results page <sup class="footnote-ref" id="fnref-lfw_results"><a href="#fn-lfw_results">1</a></sup> provided by the authors, there over 2 dozen commercial uses of the LFW face dataset.</p>
+<div class="footnotes">
+<hr>
+<ol><li id="fn-lfw_results"><p>"LFW Results". Accessed Dec 3, 2018. <a href="http://vis-www.cs.umass.edu/lfw/results.html">http://vis-www.cs.umass.edu/lfw/results.html</a><a href="#fnref-lfw_results" class="footnote">&#8617;</a></p></li>
+</ol>
+</div>
+</section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/public/research/from_1_to_100_pixels/index.html b/site/public/research/from_1_to_100_pixels/index.html
new file mode 100644
index 00000000..751e885b
--- /dev/null
+++ b/site/public/research/from_1_to_100_pixels/index.html
@@ -0,0 +1,101 @@
+<!doctype html>
+<html>
+<head>
+ <title>MegaPixels</title>
+ <meta charset="utf-8" />
+ <meta name="author" content="Adam Harvey<br> Berit Gilma<br> Matthew Stender" />
+ <meta name="description" content="High resolution insights from low resolution imagery" />
+ <meta name="referrer" content="no-referrer" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <link rel='stylesheet' href='/assets/css/fonts.css' />
+ <link rel='stylesheet' href='/assets/css/css.css' />
+</head>
+<body>
+ <header>
+ <a class='slogan' href="/">
+ <div class='logo'></div>
+ <div class='site_name'>MegaPixels</div>
+ <span class='sub'>The Darkside of Datasets</span>
+ </a>
+ <div class='links'>
+ <a href="/search">Face Search</a>
+ <a href="/datasets">Datasets</a>
+ <a href="/research/from_1_to_100_pixels/">Research</a>
+ <a href="/about">About</a>
+ </div>
+ </header>
+ <div class="content">
+
+ <section>
+ <h1>From 1 to 100 Pixels</h1>
+ <div class='meta'>
+ <div>
+ <div class='gray'>Posted</div>
+ <div>2018-12-04</div>
+ </div>
+ <div>
+ <div class='gray'>By</div>
+ <div>Adam Harvey<br> Berit Gilma<br> Matthew Stender</div>
+ </div>
+
+ </div>
+ </section>
+
+ <section><h2>High resolution insights from low resolution data</h2>
+<p>This post will be about the meaning of "face". How do people define it? How to biometrics researchers define it? How has it changed during the last decade.</p>
+<p>What can you know from a very small amount of information?</p>
+<ul>
+<li>1 pixel grayscale</li>
+<li>2x2 pixels grayscale, font example</li>
+<li>4x4 pixels</li>
+<li>8x8 yotta yotta</li>
+<li>5x7 face recognition</li>
+<li>12x16 activity recognition</li>
+<li>6/5 (up to 124/106) pixels in height/width, and the average is 24/20 for QMUL SurvFace</li>
+<li>20x16 tiny faces paper</li>
+<li>20x20 MNIST handwritten images <a href="http://yann.lecun.com/exdb/mnist/">http://yann.lecun.com/exdb/mnist/</a></li>
+<li>24x24 haarcascade detector idealized images</li>
+<li>32x32 CIFAR image dataset</li>
+<li>40x40 can do emotion detection, face recognition at scale, 3d modeling of the face. include datasets with faces at this resolution including pedestrian.</li>
+<li>need more material from 60-100</li>
+<li>60x60 show how texture emerges and pupils, eye color, higher resolution of features and compare to lower resolution faces</li>
+<li>100x100 0.5% of one Instagram photo</li>
+</ul>
+<p>Find specific cases of facial resolution being used in legal cases, forensic investigations, or military footage</p>
+<p>Research</p>
+<ul>
+<li>NIST report on sres states several resolutions</li>
+<li>"Results show that the tested face recognition systems yielded similar performance for query sets with eye-to-eye distance from 60 pixels to 30 pixels" <sup class="footnote-ref" id="fnref-nist_sres"><a href="#fn-nist_sres">1</a></sup></li>
+</ul>
+<div class="footnotes">
+<hr>
+<ol><li id="fn-nist_sres"><p>NIST 906932. Performance Assessment of Face Recognition Using Super-Resolution. Shuowen Hu, Robert Maschal, S. Susan Young, Tsai Hong Hong, Jonathon P. Phillips<a href="#fnref-nist_sres" class="footnote">&#8617;</a></p></li>
+</ol>
+</div>
+</section>
+
+ <section>
+ <h3>MORE RESEARCH</h3>
+ <div class='blogposts'>
+
+ </div>
+ </section>
+
+ </div>
+ <footer>
+ <div>
+ <a href="/">MegaPixels.cc</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
+ <a href="/about/">About</a>
+ <a href="/about/team/">Team</a>
+ </div>
+ <div>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
+ </div>
+ </footer>
+</body>
+<script src="/assets/js/app/site.js"></script>
+</html> \ No newline at end of file
diff --git a/site/templates/layout.html b/site/templates/layout.html
index 304e804f..5b5833be 100644
--- a/site/templates/layout.html
+++ b/site/templates/layout.html
@@ -3,6 +3,9 @@
<head>
<title>MegaPixels</title>
<meta charset="utf-8" />
+ <meta name="author" content="{{ metadata.authors }}" />
+ <meta name="description" content="{{ metadata.desc }}" />
+ <meta name="referrer" content="no-referrer" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<link rel='stylesheet' href='/assets/css/fonts.css' />
<link rel='stylesheet' href='/assets/css/css.css' />
@@ -17,7 +20,7 @@
<div class='links'>
<a href="/search">Face Search</a>
<a href="/datasets">Datasets</a>
- <a href="/blog">Blog</a>
+ <a href="{{ latest_research_post.url }}">Research</a>
<a href="/about">About</a>
</div>
</header>
@@ -27,13 +30,15 @@
<footer>
<div>
<a href="/">MegaPixels.cc</a>
- <a href="/legal/terms/">Terms of Use</a>
- <a href="/legal/privacy/">Privacy</a>
+ <a href="/about/disclaimer/">Disclaimer</a>
+ <a href="/about/terms/">Terms of Use</a>
+ <a href="/about/privacy/">Privacy</a>
<a href="/about/">About</a>
<a href="/about/team/">Team</a>
</div>
<div>
- MegaPixels &copy;2017-19 Adam R. Harvey / <a href="https://ahprojects.com">ahprojects.com</a>
+ MegaPixels &copy;2017-19 Adam R. Harvey /&nbsp;
+ <a href="https://ahprojects.com">ahprojects.com</a>
</div>
</footer>
</body>
diff --git a/site/templates/blog.html b/site/templates/research.html
index b23b2f29..4263f204 100644
--- a/site/templates/blog.html
+++ b/site/templates/research.html
@@ -6,11 +6,11 @@
<div class='meta'>
<div>
<div class='gray'>Posted</div>
- <div>{{ metadata.date }}</div>
+ <div>{{ metadata.published }}</div>
</div>
<div>
<div class='gray'>By</div>
- <div>{{ metadata.author }}</div>
+ <div>{{ metadata.authors }}</div>
</div>
{% if metadata.datasets %}<div>
<div class='gray'>Datasets</div>
@@ -18,5 +18,18 @@
</div>{% endif %}
</div>
</section>
+
{{ content }}
+
+ <section>
+ <h3>MORE RESEARCH</h3>
+ <div class='blogposts'>
+ {% for blogpost in blogposts %}
+ <div>
+ <a href="{{ blogpost.url }}">{{ blogpost.title }}</a>
+ <span class='sub'>{{ blogpost.date }}</span>
+ </div>
+ {% endfor %}
+ </div>
+ </section>
{% endblock %}