@ -1,16 +1,114 @@ |
||||
logs |
||||
# Byte-compiled / optimized / DLL files |
||||
__pycache__/ |
||||
*.py[cod] |
||||
*$py.class |
||||
|
||||
# C extensions |
||||
*.so |
||||
|
||||
# Distribution / packaging |
||||
.Python |
||||
build/ |
||||
develop-eggs/ |
||||
dist/ |
||||
downloads/ |
||||
eggs/ |
||||
.eggs/ |
||||
lib/ |
||||
lib64/ |
||||
parts/ |
||||
sdist/ |
||||
var/ |
||||
wheels/ |
||||
*.egg-info/ |
||||
.installed.cfg |
||||
*.egg |
||||
|
||||
# PyInstaller |
||||
# Usually these files are written by a python script from a template |
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
||||
*.manifest |
||||
*.spec |
||||
|
||||
# Installer logs |
||||
pip-log.txt |
||||
pip-delete-this-directory.txt |
||||
|
||||
# Unit test / coverage reports |
||||
htmlcov/ |
||||
.tox/ |
||||
.coverage |
||||
.coverage.* |
||||
.cache |
||||
nosetests.xml |
||||
coverage.xml |
||||
*.cover |
||||
.hypothesis/ |
||||
|
||||
# Translations |
||||
*.mo |
||||
*.pot |
||||
|
||||
# Django stuff: |
||||
*.log |
||||
npm-debug.log* |
||||
yarn-debug.log* |
||||
yarn-error.log* |
||||
.DS_Store |
||||
|
||||
coverage |
||||
node_modules |
||||
build |
||||
.env.local |
||||
.env.development.local |
||||
.env.test.local |
||||
.env.production.local |
||||
local_settings.py |
||||
|
||||
# Flask stuff: |
||||
instance/ |
||||
.webassets-cache |
||||
|
||||
# Scrapy stuff: |
||||
.scrapy |
||||
|
||||
# Sphinx documentation |
||||
docs/_build/ |
||||
|
||||
# PyBuilder |
||||
target/ |
||||
|
||||
# Jupyter Notebook |
||||
.ipynb_checkpoints |
||||
|
||||
# pyenv |
||||
.python-version |
||||
|
||||
# celery beat schedule file |
||||
celerybeat-schedule |
||||
|
||||
# SageMath parsed files |
||||
*.sage.py |
||||
|
||||
# Environments |
||||
.env |
||||
.venv |
||||
env/ |
||||
venv/ |
||||
ENV/ |
||||
|
||||
# Spyder project settings |
||||
.spyderproject |
||||
.spyproject |
||||
|
||||
# Rope project settings |
||||
.ropeproject |
||||
|
||||
# mkdocs documentation |
||||
/site |
||||
|
||||
# mypy |
||||
.mypy_cache/ |
||||
|
||||
# Editor |
||||
*.swp |
||||
*.swo |
||||
|
||||
# DB |
||||
db.sqlite3 |
||||
|
||||
# Test mount |
||||
test/ |
||||
|
||||
# VS Code |
||||
.vscode/ |
||||
|
||||
output/ |
||||
|
@ -0,0 +1,5 @@ |
||||
Title: My First Review |
||||
Date: 2010-12-03 10:20 |
||||
Category: Review |
||||
|
||||
Following is a review of my favorite mechanical keyboard. |
@ -1,18 +0,0 @@ |
||||
{ |
||||
"name": "my-razzle-app", |
||||
"version": "2.0.0-alpha.8", |
||||
"license": "MIT", |
||||
"scripts": { |
||||
"start": "razzle start", |
||||
"build": "razzle build", |
||||
"test": "razzle test --env=jsdom", |
||||
"start:prod": "NODE_ENV=production node build/server.js" |
||||
}, |
||||
"dependencies": { |
||||
"express": "^4.16.3", |
||||
"razzle": "^2.2.0", |
||||
"react": "^16.4.1", |
||||
"react-dom": "^16.4.1", |
||||
"react-router-dom": "^4.3.1" |
||||
} |
||||
} |
@ -0,0 +1,35 @@ |
||||
#!/usr/bin/env python |
||||
# -*- coding: utf-8 -*- # |
||||
from __future__ import unicode_literals |
||||
|
||||
AUTHOR = 'Tanner' |
||||
SITENAME = 'Tanner Collin' |
||||
SITEURL = '' |
||||
|
||||
PATH = 'content' |
||||
|
||||
TIMEZONE = 'Canada/Mountain' |
||||
|
||||
DEFAULT_LANG = 'en' |
||||
|
||||
# Feed generation is usually not desired when developing |
||||
FEED_ALL_ATOM = None |
||||
CATEGORY_FEED_ATOM = None |
||||
TRANSLATION_FEED_ATOM = None |
||||
AUTHOR_FEED_ATOM = None |
||||
AUTHOR_FEED_RSS = None |
||||
|
||||
# Blogroll |
||||
LINKS = (('Pelican', 'http://getpelican.com/'), |
||||
('Python.org', 'http://python.org/'), |
||||
('Jinja2', 'http://jinja.pocoo.org/'), |
||||
('You can modify those links in your config file', '#'),) |
||||
|
||||
# Social widget |
||||
SOCIAL = (('You can add links in your config file', '#'), |
||||
('Another social link', '#'),) |
||||
|
||||
DEFAULT_PAGINATION = False |
||||
|
||||
# Uncomment following line if you want document-relative URLs when developing |
||||
#RELATIVE_URLS = True |
Before Width: | Height: | Size: 32 KiB |
@ -1,48 +0,0 @@ |
||||
/* http://meyerweb.com/eric/tools/css/reset/ |
||||
v2.0 | 20110126 |
||||
License: none (public domain) |
||||
*/ |
||||
|
||||
html, body, div, span, applet, object, iframe, |
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, |
||||
a, abbr, acronym, address, big, cite, code, |
||||
del, dfn, em, img, ins, kbd, q, s, samp, |
||||
small, strike, strong, sub, sup, tt, var, |
||||
b, u, i, center, |
||||
dl, dt, dd, ol, ul, li, |
||||
fieldset, form, label, legend, |
||||
table, caption, tbody, tfoot, thead, tr, th, td, |
||||
article, aside, canvas, details, embed, |
||||
figure, figcaption, footer, header, hgroup, |
||||
menu, nav, output, ruby, section, summary, |
||||
time, mark, audio, video { |
||||
margin: 0; |
||||
padding: 0; |
||||
border: 0; |
||||
font-size: 100%; |
||||
font: inherit; |
||||
vertical-align: baseline; |
||||
} |
||||
/* HTML5 display-role reset for older browsers */ |
||||
article, aside, details, figcaption, figure, |
||||
footer, header, hgroup, menu, nav, section { |
||||
display: block; |
||||
} |
||||
body { |
||||
line-height: 1; |
||||
} |
||||
ol, ul { |
||||
list-style: none; |
||||
} |
||||
blockquote, q { |
||||
quotes: none; |
||||
} |
||||
blockquote:before, blockquote:after, |
||||
q:before, q:after { |
||||
content: ''; |
||||
content: none; |
||||
} |
||||
table { |
||||
border-collapse: collapse; |
||||
border-spacing: 0; |
||||
} |
@ -1,2 +0,0 @@ |
||||
User-agent: * |
||||
|
@ -0,0 +1,25 @@ |
||||
#!/usr/bin/env python |
||||
# -*- coding: utf-8 -*- # |
||||
from __future__ import unicode_literals |
||||
|
||||
# This file is only used if you use `make publish` or |
||||
# explicitly specify it as your config file. |
||||
|
||||
import os |
||||
import sys |
||||
sys.path.append(os.curdir) |
||||
from pelicanconf import * |
||||
|
||||
# If your site is available via HTTPS, make sure SITEURL begins with https:// |
||||
SITEURL = '' |
||||
RELATIVE_URLS = False |
||||
|
||||
FEED_ALL_ATOM = 'feeds/all.atom.xml' |
||||
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml' |
||||
|
||||
DELETE_OUTPUT_DIRECTORY = True |
||||
|
||||
# Following items are often useful when publishing |
||||
|
||||
#DISQUS_SITENAME = "" |
||||
#GOOGLE_ANALYTICS = "" |
@ -1,11 +0,0 @@ |
||||
* { |
||||
box-sizing: border-box; |
||||
} |
||||
|
||||
body { |
||||
line-height: 1.6; |
||||
font-size: 1.25rem; |
||||
font-family: 'Open Sans', sans-serif; |
||||
color: #333; |
||||
background-color: #F9F9F9; |
||||
} |
@ -1,13 +0,0 @@ |
||||
import React from 'react'; |
||||
import Route from 'react-router-dom/Route'; |
||||
import Switch from 'react-router-dom/Switch'; |
||||
import Home from './Home'; |
||||
import './App.css'; |
||||
|
||||
const App = () => ( |
||||
<Switch> |
||||
<Route exact path='/' component={Home} /> |
||||
</Switch> |
||||
); |
||||
|
||||
export default App; |
@ -1,176 +0,0 @@ |
||||
.grid-container { |
||||
text-align: center; |
||||
max-width: 120rem; |
||||
margin: 0 auto; |
||||
} |
||||
|
||||
.grid-item { |
||||
position: relative; |
||||
|
||||
float: left; |
||||
|
||||
width: 30rem; |
||||
min-width: 25rem; |
||||
min-height: 25rem; |
||||
padding-bottom: 30rem; |
||||
} |
||||
|
||||
.grid-item-content { |
||||
position: absolute; |
||||
width: 100%; |
||||
height: 100%; |
||||
padding: 1rem; |
||||
} |
||||
|
||||
.menu { |
||||
display: flex; |
||||
flex-flow: column; |
||||
} |
||||
|
||||
.menu .logo { |
||||
background-color: #E9E9E9; |
||||
object-fit: contain; |
||||
padding-top: 1em; |
||||
min-height: 5rem; |
||||
} |
||||
|
||||
.menu section { |
||||
background-color: #E9E9E9; |
||||
flex: 1; |
||||
} |
||||
|
||||
.menu section aside { |
||||
} |
||||
|
||||
.menu section .fuckcss { |
||||
position: relative; |
||||
height: 100%; |
||||
} |
||||
|
||||
.menu section img { |
||||
max-height: 100%; |
||||
width: auto; |
||||
} |
||||
|
||||
.menu footer { |
||||
background-color: #E9E9E9; |
||||
padding-bottom: 1rem; |
||||
} |
||||
|
||||
.project { |
||||
display: flex; |
||||
flex-flow: column; |
||||
} |
||||
|
||||
.project header { |
||||
font-size: 2rem; |
||||
line-height: 1.2; |
||||
} |
||||
|
||||
.project section { |
||||
min-height: 0; |
||||
flex: 1; |
||||
} |
||||
|
||||
.project.bottom section { |
||||
flex-flow: column; |
||||
display: flex; |
||||
} |
||||
|
||||
.project.left section p { |
||||
position: relative; |
||||
top: 50%; |
||||
transform: translateY(-50%); |
||||
} |
||||
|
||||
.project.left section img { |
||||
height: 100%; |
||||
float: right; |
||||
padding: 1rem; |
||||
} |
||||
|
||||
.project.bottom section p { |
||||
margin-bottom: 1rem; |
||||
} |
||||
|
||||
.project.bottom section img { |
||||
object-fit: contain; |
||||
min-height: 0; |
||||
padding: 1rem; |
||||
} |
||||
|
||||
.photo a { |
||||
display: block; |
||||
position: relative; |
||||
height: 100%; |
||||
} |
||||
|
||||
.photo header { |
||||
display: none; |
||||
position: absolute; |
||||
width: 100%; |
||||
z-index: 2; |
||||
|
||||
background: rgba(0, 0, 0, 0.4); |
||||
color: white; |
||||
} |
||||
|
||||
.photo header { |
||||
top: 0; |
||||
font-size: 1.5rem; |
||||
padding: 0.5rem; |
||||
} |
||||
|
||||
.photo a:hover header { |
||||
display: block; |
||||
} |
||||
|
||||
.photo img { |
||||
position: absolute; |
||||
height: 100%; |
||||
left: 0; |
||||
} |
||||
|
||||
@media all and (max-width: 120rem) { |
||||
.grid-item { |
||||
width: 25%; |
||||
padding-bottom: 25% |
||||
} |
||||
} |
||||
|
||||
@media all and (max-width: 102rem) { |
||||
.grid-item { |
||||
width: 33.33%; |
||||
padding-bottom: 33.33%; |
||||
} |
||||
} |
||||
|
||||
@media all and (max-width: 76.5rem) { |
||||
.grid-container { |
||||
max-width: 68rem; |
||||
} |
||||
.grid-item { |
||||
width: 50%; |
||||
padding-bottom: 50%; |
||||
} |
||||
} |
||||
|
||||
@media all and (max-width: 51rem) { |
||||
.grid-container { |
||||
max-width: 34rem; |
||||
} |
||||
.grid-item { |
||||
width: 100%; |
||||
padding-bottom: 100%; |
||||
margin-bottom: 1rem; |
||||
} |
||||
.menu { |
||||
background-color: #E9E9E9; |
||||
} |
||||
.grid-item-content.photo { |
||||
padding: 0; |
||||
} |
||||
.photo a header { |
||||
display: block; |
||||
} |
||||
} |
@ -1,95 +0,0 @@ |
||||
import React from 'react'; |
||||
import './Grid.css'; |
||||
|
||||
import logo from './logo.png'; |
||||
import GridItem from './GridItem'; |
||||
|
||||
import tanner from './tanner.jpg'; |
||||
import dress1 from './dress1.jpg'; |
||||
import switch1 from './switch1.jpg'; |
||||
import pump1 from './pump1.jpg'; |
||||
import hand1 from './hand1.jpg'; |
||||
|
||||
import banff1 from './banff1.jpg'; |
||||
import bee1 from './bee1.jpg'; |
||||
import canmore1 from './canmore1.jpg'; |
||||
import carshow1 from './carshow1.jpg'; |
||||
|
||||
//function importAll(r) {
|
||||
// return r.keys().map(x => r(x));
|
||||
//}
|
||||
|
||||
//const images = importAll(require.context('./images'));
|
||||
|
||||
|
||||
class Grid extends React.Component { |
||||
render() { |
||||
return ( |
||||
<div className='grid-container'> |
||||
<GridItem type='menu'> |
||||
<img src={logo} className='logo' alt='' /> |
||||
<section> |
||||
<div className='fuckcss'> |
||||
<img src={tanner} alt='' /> |
||||
</div> |
||||
</section> |
||||
<footer>More info or a .onion link.</footer> |
||||
</GridItem> |
||||
<GridItem type='project left'> |
||||
<header>LED Dress</header> |
||||
<section> |
||||
<img src={dress1} alt='' /> |
||||
<p>A dress lit up with LEDs that act as twinkling stars. Seven act as The Big Dipper, and the rest twinkle randomly.</p> |
||||
</section> |
||||
</GridItem> |
||||
<GridItem type='photo'> |
||||
<a> |
||||
<header>Thorncliffe Car Show</header> |
||||
<img src={carshow1} alt='' /> |
||||
</a> |
||||
</GridItem> |
||||
<GridItem type='project bottom'> |
||||
<header>Remote Control Lightswitch</header> |
||||
<section> |
||||
<img src={switch1} alt='' /> |
||||
<p>Custom circuit that lets me control a ceiling light over Wifi.</p> |
||||
</section> |
||||
</GridItem> |
||||
<GridItem type='project bottom'> |
||||
<header>Plant Waterer</header> |
||||
<section> |
||||
<img src={pump1} alt='' /> |
||||
<p>Controller that waters my plant automatically every day.</p> |
||||
</section> |
||||
</GridItem> |
||||
<GridItem type='photo'> |
||||
<a> |
||||
<header>Prince's Island Park</header> |
||||
<img src={bee1} alt='' /> |
||||
</a> |
||||
</GridItem> |
||||
<GridItem type='photo'> |
||||
<a> |
||||
<header>Johnston Creek, Banff</header> |
||||
<img src={banff1} alt='' /> |
||||
</a> |
||||
</GridItem> |
||||
<GridItem type='project left'> |
||||
<header>Hand of Ozymandias</header> |
||||
<section> |
||||
<img src={hand1} alt='' /> |
||||
<p>Sculpture welded together out of scrap metal for practice.</p> |
||||
</section> |
||||
</GridItem> |
||||
<GridItem type='photo'> |
||||
<a> |
||||
<header>VW Van in Canmore</header> |
||||
<img src={canmore1} alt='' /> |
||||
</a> |
||||
</GridItem> |
||||
</div> |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default Grid; |
@ -1,15 +0,0 @@ |
||||
import React from 'react'; |
||||
|
||||
class GridItem extends React.Component { |
||||
render() { |
||||
return ( |
||||
<div className='grid-item'> |
||||
<div className={'grid-item-content ' + this.props.type}> |
||||
{this.props.children} |
||||
</div> |
||||
</div> |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default GridItem; |
@ -1,16 +0,0 @@ |
||||
import React from 'react'; |
||||
import './Home.css'; |
||||
|
||||
import Grid from './Grid'; |
||||
|
||||
class Home extends React.Component { |
||||
render() { |
||||
return ( |
||||
<div className='Home'> |
||||
<Grid /> |
||||
</div> |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default Home; |
Before Width: | Height: | Size: 565 KiB |
Before Width: | Height: | Size: 220 KiB |
Before Width: | Height: | Size: 301 KiB |
Before Width: | Height: | Size: 371 KiB |
@ -1,15 +0,0 @@ |
||||
import App from './App'; |
||||
import BrowserRouter from 'react-router-dom/BrowserRouter'; |
||||
import React from 'react'; |
||||
import { hydrate } from 'react-dom'; |
||||
|
||||
hydrate( |
||||
<BrowserRouter> |
||||
<App /> |
||||
</BrowserRouter>, |
||||
document.getElementById('root') |
||||
); |
||||
|
||||
if (module.hot) { |
||||
module.hot.accept(); |
||||
} |
Before Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 1.1 MiB |
@ -1,26 +0,0 @@ |
||||
import app from './server'; |
||||
import http from 'http'; |
||||
|
||||
const server = http.createServer(app); |
||||
|
||||
let currentApp = app; |
||||
|
||||
server.listen(process.env.PORT || 3000, error => { |
||||
if (error) { |
||||
console.log(error); |
||||
} |
||||
|
||||
console.log('🚀 started'); |
||||
}); |
||||
|
||||
if (module.hot) { |
||||
console.log('✅ Server-side HMR Enabled!'); |
||||
|
||||
module.hot.accept('./server', () => { |
||||
console.log('🔁 HMR Reloading `./server`...'); |
||||
server.removeListener('request', currentApp); |
||||
const newApp = require('./server').default; |
||||
server.on('request', newApp); |
||||
currentApp = newApp; |
||||
}); |
||||
} |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.2 MiB |
@ -1,53 +0,0 @@ |
||||
import App from './App'; |
||||
import React from 'react'; |
||||
import { StaticRouter } from 'react-router-dom'; |
||||
import express from 'express'; |
||||
import { renderToString } from 'react-dom/server'; |
||||
|
||||
const assets = require(process.env.RAZZLE_ASSETS_MANIFEST); |
||||
|
||||
const server = express(); |
||||
server |
||||
.disable('x-powered-by') |
||||
.use(express.static(process.env.RAZZLE_PUBLIC_DIR)) |
||||
.get('/*', (req, res) => { |
||||
const context = {}; |
||||
const markup = renderToString( |
||||
<StaticRouter context={context} location={req.url}> |
||||
<App /> |
||||
</StaticRouter> |
||||
); |
||||
|
||||
if (context.url) { |
||||
res.redirect(context.url); |
||||
} else { |
||||
res.status(200).send( |
||||
`<!doctype html>
|
||||
<html lang=""> |
||||
<head> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
||||
<meta charset="utf-8" /> |
||||
<title>Tanner Collin</title> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<link rel="stylesheet" href="reset.css"> |
||||
<link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet"> |
||||
${ |
||||
assets.client.css |
||||
? `<link rel="stylesheet" href="${assets.client.css}">` |
||||
: '' |
||||
} |
||||
${ |
||||
process.env.NODE_ENV === 'production' |
||||
? `<script src="${assets.client.js}" defer></script>` |
||||
: `<script src="${assets.client.js}" defer crossorigin></script>` |
||||
} |
||||
</head> |
||||
<body> |
||||
<div id="root">${markup}</div> |
||||
</body> |
||||
</html>` |
||||
); |
||||
} |
||||
}); |
||||
|
||||
export default server; |
Before Width: | Height: | Size: 848 KiB |
Before Width: | Height: | Size: 324 KiB |