Simplified to two pages.

This commit is contained in:
Ian Adam Naval 2014-01-08 21:25:27 -08:00
parent 219ace8fbe
commit b110d8ad49
8 changed files with 37 additions and 283 deletions

View File

@ -10,17 +10,6 @@ def home():
return render_template('index.html')
@app.route('/contact')
def contact():
return render_template('contact.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/labs')
def labs():
return render_template('labs.html')

View File

@ -8,10 +8,10 @@ img#me {
float: left;
}
img#me.fixed {
/*img#me.fixed {
position: fixed;
top: 48px;
}
}*/
#skills, #about-me, #hobbies {
margin: 0;

View File

@ -1,109 +0,0 @@
/**
* Gets the cummulative offset from the origin of a particular element by iteratively going through its parents.
**/
function getCumulativeOffset(element) {
var left, top;
left = top = 0;
if (element != null && element.offsetParent) {
do {
left += element.offsetLeft;
top += element.offsetTop;
} while (element = element.offsetParent);
}
return {
x: left,
y: top
};
};
/**
* Gets the scroll position.
*/
function getScrollY() {
var y = 0;
if (typeof( window.pageYOffset ) == 'number') { // Netscape
//x = window.pageXOffset;
y = window.pageYOffset;
} else if (document.body && ( document.body.scrollLeft || document.body.scrollTop)) { // DOM
//x = document.body.scrollLeft;
y = document.body.scrollTop;
} else if (document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop)) { // IE6 standards compliant mode
//x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return y;
}
var lastPosition = -1;
/**
* Smoothly scrolls to a position.
**/
function smoothScrollTo(target) {
var currentPosition = getScrollY();
var delta = (target - currentPosition) / 6.0;
var nextStep = currentPosition + delta;
// Check whether scrolling has been interrupted by the user.
var halted = false;
if (nextStep > lastPosition) {
halted = currentPosition > nextStep || currentPosition < lastPosition;
} else {
halted = currentPosition < nextStep || currentPosition > lastPosition;
}
if (halted) {
lastPosition = -1;
return;
}
window.scrollBy(0, delta);
if (Math.abs(delta) >= 1) {
setTimeout('smoothScrollTo(' + target + ')', 50);
} else {
lastPosition = -1;
return;
}
lastPosition = currentPosition;
}
/**
* Smoothly scrolls to an element.
*/
function scrollToElement(element) {
lastPosition = getScrollY();
smoothScrollTo(getCumulativeOffset(document.getElementById(element)).y);
}
/**
* Scrolls up to the top.
*/
function scrollToTop() {
lastPosition = getScrollY();
smoothScrollTo(0);
}
// Declare variables outside function for efficiency.
var nav = document.getElementById("nav");
var me = document.getElementById("me");
var headerHeight = getCumulativeOffset(nav).y;
if (me != null) var myHeight = getCumulativeOffset(me).y;
/**
* Apples a CSS class to the navigation bar based on scroll position.
**/
function onScroll() {
var scrollY = getScrollY();
nav.className = (scrollY > headerHeight) ? "scrolled" : "top";
if (me != null) {
me.className = (scrollY > myHeight) ? "fixed" : "";
}
}
// Set up event listener.
window.onscroll = onScroll;
window.addEventListener("touchmove", onScroll, false);

View File

@ -1,48 +0,0 @@
{% extends "base.html" %}
{% block title %} | About{% endblock %}
{% block nav_about %} class="selected" {% endblock %}
{% block extrastyle %}<link rel="stylesheet" href="{{ url_for('static', filename='css/about.css') }}" type="text/css" media="screen" />{% endblock %}
{% block main %}
<img id="me" src="{{ url_for('static', filename='img/ian.jpg') }}" alt="Picture of Ian Naval" />
<section id="skills">
<h3>Skills</h3>
<h4>General Programming</h4>
<ul>
<li>I specialize in clean, well-documented and efficient code.</li>
<li>I work quickly.</li>
<li>I am great at collaborating with other developers and have made contributions to the open-source community.</li>
<li>I am proficient in Java, Javascript, Python, HTML5, CSS3, Ruby, PHP, SQL, and C++.</li>
<li>I have years of experience with Linux and UNIX-based Web servers.</li>
</ul>
<h4>Web</h4>
<ul>
<li>My primary expertise in back-end Web development is with the Django Python framework.</li>
<li>I am comfortable working with multiple programming languages.</li>
<li>I always write <a href="http://validator.w3.org/check?uri=http%3A%2F%2Fianonavy.com%2F">valid HTML</a> and <a href="http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.ianonavy.com%2Fstatic%2Fcss%2Fstyle.css&profile=css3&usermedium=all&warning=1&vextwarning=">CSS</a>.</li>
</ul>
<h4>Android</h4>
<ul>
<li>I write code that takes is very DRY and takes advantage of Java's Object-Oriented structure.</li>
<li>My XML layouts are functional, simple and effective.</li>
<li>I optimize my apps for compatibility with multiple devices.</li>
</ul>
<h4>Administrative</h4>
<ul>
<li>I own any problems that may arise and am very driven to resolve them as quickly as possible.</li>
<li>I configure Web servers from scratch.</li>
<li>I am paranoid about database backups.</li>
<li>I love optimizing processes on VPSes for speed and storage efficiency.</li>
<li>I hate repetitive tasks and write scripts to solve many problems.</li>
</ul>
</section>
<section id="about-me">
<h3>About Me</h3>
<p>My name is Ian. I make things with computers. Sometimes you'll find me
doing various other activities like playing the piano or ukulele, but more
often then not I am sitting in front of a screen working on my long list
of projects. Hope to see you around the Web.</p>
</section>
{% endblock main %}

View File

@ -38,9 +38,9 @@
<nav id="nav" class="top">
<a href="/"><img id="small-logo" src="{{ url_for('static', filename='img/logo-24.png') }}" alt="small ianonavy logo" /></a>
<ul>
<li{% block nav_about %}{% endblock nav_about %}><a href="{{ url_for('about') }}">About</a></li>
<li{% block nav_contact %}{% endblock nav_contact %}><a href="{{ url_for('contact') }}">Contact</a></li>
<li{% block nav_portfolio %}{% endblock nav_portfolio %}><a href="{{ url_for('home') }}">Portfolio</a></li>
<li{% block nav_portfolio %}{% endblock nav_portfolio %}><a href="{{ url_for('home') }}#portfolio">Portfolio</a></li>
<li{% block nav_about %}{% endblock nav_about %}><a href="{{ url_for('home') }}#about">About</a></li>
<li{% block nav_contact %}{% endblock nav_contact %}><a href="{{ url_for('home') }}#contact">Contact</a></li>
<li{% block nav_labs %}{% endblock nav_labs %}><a href="{{ url_for('labs') }}">Labs</a></li>
<li{% block nav_code %}{% endblock nav_code %}><a href="http://www.github.com/ianonavy">Code</a></li>
<li{% block nav_blog %}{% endblock nav_blog %}><a href="http://blog.ianonavy.com/">Blog</a></li>
@ -57,7 +57,6 @@
<footer id="footer">
{% block footer %}Copyright &copy; 2012 Ian Adam Naval. All rights reserved.{% endblock footer %}
</footer>
<script type="text/javascript" src="{{ url_for('static', filename='js/index.js') }}"></script>
</body>
</html>

View File

@ -1,36 +0,0 @@
{% extends "base.html" %}
{% block title %} | Contact{% endblock %}
{% block nav_contact %} class="selected" {% endblock %}
{% block extrastyle %}<link rel="stylesheet" href="{{ url_for('static', filename='css/contact.css') }}" type="text/css" media="screen" />{% endblock %}
{% block main %}
<section id="contact">
{% if success %}
<span class="">Thank you for contacting me! Your message was sent successfully.</span>
{% else %}
<form id="contact_form" action="/newdesign/contact/" method="post">
{# contact_form.name.errors #}
{# contact_form.name.label_tag #}
{# contact_form.name #}
{# contact_form.email.errors #}
{# contact_form.email.label_tag #}
{# contact_form.email #}
{# contact_form.body.errors #}
{# contact_form.body.label_tag #}
{# contact_form.body #}
<input type="submit" value="Submit" />
</form>
{% endif %}
<p>Hablo español.</p>
</section>
<section id="internet">
<h3>Find me on the Internet</h3>
<p id="social_links">
<a href="http://www.github.com/ianonavy"><img src="{{ url_for('static', filename='img/icons/32/github.png') }}" alt="GitHub" /></a>
<a href="http://forr.st/-ianonavy"><img src="{{ url_for('static', filename='img/icons/32/forrst.png') }}" alt="Forrst" /></a>
<a href="skype:ianonavy?userinfo"><img src="{{ url_for('static', filename='img/icons/32/skype.png') }}" alt="Skype" /></a>
<a href="http://stackoverflow.com/users/765439/ianonavy"><img src="{{ url_for('static', filename='img/icons/32/stackoverflow.png') }}" alt="Stackoverflow" /></a>
</p>
</section>
{% endblock main %}

View File

@ -1,73 +1,45 @@
{% extends "base.html" %}
{% block nav_portfolio %} class="selected" {% endblock %}
{% block extrastyle %}<link rel="stylesheet" href="{{ url_for('static', filename='css/portfolio.css') }}" type="text/css" media="screen" />{% endblock %}
{% block extrastyle %}<link rel="stylesheet" href="{{ url_for('static', filename='css/portfolio.css') }}" type="text/css" media="screen" />
<link rel="stylesheet" href="{{ url_for('static', filename='css/about.css') }}" type="text/css" media="screen" />{% endblock %}
{% block main %}
<p id="intro">Read more about my experience with <a href="javascript:scrollToElement('android')">Android apps</a>, <a href="javascript:scrollToElement('websites')">websites</a>, and <a href="javascript:scrollToElement('sysadmin')">system administration</a>:</p>
<section id="android" class="section">
<h2>Android</h2>
<div id="mathhammer" class="item">
<img src="{{ url_for('static', filename='img/mathhammer.png') }}" alt="MathHammer 40k screenshot" />
<h3>MathHammer 40k</h3>
<p>MathHammer 40k helps Warhammer 40k determine your chance of success. It helps check a model's predicted success in shooting against infantry and monstrous creatures, melee against infantry and monstrous creatures, and attempting to penetrate armor.</p>
<p>I designed this app for my high school physics teacher, and we worked together to get it on Google Play. It was the gateway for me into the Android application development industry.</p>
<p>MathHammer 40k was designed for easy of use and simplicity. All of the input controls were made available on one screen without scrolling, and calculations are made automatically as the player enters their model's statistics.</p>
<p>Check it out on <a href="https://play.google.com/store/apps/details?id=com.mathhammer40k.mathhammer">Google Play</a>.</p>
</div>
<div id="smspammer" class="item">
<h3>SMSpammer</h3>
<img src="{{ url_for('static', filename='img/smspammer.png') }}" alt="SMSpammer screenshot" />
<p>Ever wanted to send the same message multiple times? You're in luck! This app is sure to flood your friend's inbox with messages. Annoy your friends to your heart's desire with this simple SMS spammer.</p>
<p>This simple but elegant app is the first of its kind, and it's the first app that I ever published by myself to the Android market. Unlike competitors, this app will not freeze the sender's phone and launches large quantities of text messages in small batches. It also does not keep record of these messages in your normal texting app, so you don't have to worry about your own phone being flooded with annoying messages.</p>
<p>Check it out on <a href="https://play.google.com/store/apps/details?id=com.ianonavy.spammer">Google Play</a>.</p>
</div>
<section id="portfolio">
<h2>Portfolio</h2>
<p><a class="button" href='http://files.ianonavy.com/resume.pdf'>View Resume</a></p>
</section>
<section id="websites" class="section">
<h2>Websites</h2>
<div id="mentaurus" class="item">
<h3>Mentaur Us</h3>
<a href="http://mentaur.us/"><img src="{{ url_for('static', filename='img/mentaurus.png') }}" alt="mentaur.us screenshot" /></a>
<p><a href="http://mentaur.us/">http://mentaur.us/</a></p>
<p>mentaur.us is a social-networking site that helps connect engineers with student robotics teams in their local areas. It uses reverse geocoding and the haversine formula along with a custom sorting algorithm to help match teachers, engineers, and coaches with local robotics teams based on skill and localized proximity.</p>
<p>The website's front end was designed by <a href="http://beiju.us/">Will Pryor</a>.</p>
<section id="about">
<h2>About</h2>
<img id="me" src="{{ url_for('static', filename='img/ian.jpg') }}" alt="Picture of Ian Naval" />
<div id="skills">
<h3>Skills</h3>
<ul>
<li>Learns fast.</li>
<li>Meets deadlines.</li>
<li>Works well with teammates.</li>
<li>Clean, well-documented and efficient code.</li>
<li>Years of experience with Linux and UNIX-based Web servers.</li>
<li>Proficient in Python, JavaScript, HTML, CSS, SQL, Java, Ruby, PHP, and C++.</li>
<li>Experience with Flask, Django, node.js, and AngularJS.</li>
</ul>
</div>
<div id="knightbookmarket" class="item">
<h3>Knight Book Market</h3>
<a href="http://www.knightbookmarket.tk/"><img src="{{ url_for('static', filename='img/knightbookmarket.png') }}" alt="Knight Book Market screenshot" /></a>
<p><a href="http://www.knightbookmarket.tk/">http://www.knightbookmarket.tk/</a></p>
<p>The Knight Book Market provides a place for students to easily buy and sell used textbooks. Here, students can often purchase books at a lower prices than at the official bookstore. Since the students are buying books directly from their peers, no money is lost to the corporate middle man.</p>
<p>The running costs of the site grew too much to keep it online, so I have temporarily shut it down while
I find cheaper hosting. The database has been completely wiped, but all of the source code remains.</p>
</div>
</section>
<section id="sysadmin" class="section">
<h2>System Administration</h2>
<div id="stormwood" class="item">
<h3>Stormwood Community</h3>
<img src="{{ url_for('static', filename='img/stormwood.png') }}" alt="Stormwood screenshot" />
<p><a href="http://www.stormwoodmc.net/">http://www.stormwoodmc.net/</a></p>
<p>StormWood MC is an independent video game server that runs the game Minecraft. I worked solely to setup and maintain technical aspects of running the server. My responsibilities included configuring Apache, writing a backup script, developing and maintaining the website, and documenting all responsibilities.</p>
</div>
<div id="mcrumble" class="item">
<h3>Minecraft Rumble</h3>
<img src="{{ url_for('static', filename='img/mcrumble.png') }}" alt="Minecraft Rumble screenshot" />
<p><a href="http://www.mcrumble.com/">http://www.mcrumble.com/</a></p>
<p>Minecraft Rumble is an upcoming Minecraft community currently on developmental hiatus. It features a complex system of interlinking Minecraft servers which proxy to each other and work in a manner similar to a simple cloud infrastructure. All code used to power this community will be written by me including backup scripts, Java plugins, and the Python backend for the website.</p>
<div id="about-me">
<h3>Facts</h3>
<ul>
<li>Likes potatoes, music and language.</li>
<li>Received that bag of potatoes for Christmas.</li>
<li>Does not own those glasses.</li>
</ul>
</div>
</section>
<section id="resume">
<h2>Résumé</h2>
<p>Click <a href='http://files.ianonavy.com/resume.pdf'>here</a> to download a copy of my résumé.</p>
<section id="contact">
<h2>Contact</h2>
<p>See my <a href='http://files.ianonavy.com/resume.pdf'>résumé</a>.</p>
</section>
{% endblock main %}

View File

@ -9,18 +9,5 @@
<p>Click <a href="http://demo.ianonavy.com/">here</a> to see what I'm
working on this very moment (if anything).</p>
<h2>Active Projects</h2>
<h3>Minecraft Rumble</h3>
<p>Minecraft Rumble is my big upcoming Minecraft community. It will
include many different types of games fused together into one unique
gameplay experience. Development is slow and steady, and I can't share
any of my source code, but I'll be happy to discuss how things are going.</p>
<h3>Driving Auto-reply App</h3>
<p>I am sick and tired of seeing people who drive while on the phone or
texting. To help promote distraction-free driving, I'm developing an
app that will listen for incoming calls and text messages and silently
reply with a message saying not to call back unless it's really urgent.
If the same person does happen to text again, the app alerts the driver
and asks them to pull over before reading the message. For added
security, the app will GPS to ensure that the driver has come to a
full and complete stop.</p>
{% endblock main %}