An Interview and the Enlightenment
I had an interview ~4 hours ago, I hung up the phone and had an urge to blog about it.
Full disclosure: I TOTALLY expected to bomb it. It's not a lack of confidence, but 1) I don't interview well, 2) I've often learned something because I needed to know it or was intrigued and wanted to learn it, but it got pushed out by the day's problem(s) or something new that intrigue[s|d] me. Fact of the matter is, I'm VERY confident in what I do, because I'm VERY good at what I do. 3) I know enough to do what I need to do, the rest I know how to Google and understand well enough to figure the rest out on my own. Technical interviews do not account for this. This is a blessing and a curse. Jack of all trades, master of none. I don't have a specialty. I might have a focus or an emphasis on a core technology, but I am a master of nothing.
Admittedly I do feel recently like I've lost my edge. Since leaving my old job and starting my new one, I don't feel like I used to. If I am losing it, I wonder how long I have left before it's all COMPLETELY gone. This scares me.
So the interview and the purpose of this post. Recently at my current job I've been asked to screen candidates for open positions on our team. The initial phone screen. 30 minutes. Basic Linux. This has been my first time being on this "side" of the table. I've only ever been interviewed, never interviewed anyone. First few times were rocky, but now I pretty much go with the flow. Because of the recent experience of interviewing candidates, I knew EXACTLY how my interview was going. The person interviewing me did EXACTLY what I'd do in the event the interview was going bad.
Why did it go bad? The first 5-10 minutes was me simply describing the roles/responsibilities of what I do on a day-to-day basis. No real problems here, though our teams/model/infrastructure/tools is changing and there is a lot of unknowns, my responsibilities are very clear. The second part of the interview turned to basic Linux Sys Admin questions. I say basic, because they were just that, with a TWIST! I was asked a question, and asked to describe how I'd troubleshoot/resolve the issue. I replied with the steps I'd take based on my own experience (all I have). I was then told "didn't work". I had asked "why didn't it work?" I'm expecting something like an error, or something. Being told "doesn't work" is useless to me. If I do something and don't get the results I'm expecting, I have STDOUT, I have logs, etc. But in an interview, I don't have those things. When I'm troubleshooting an issue, I have `man`, I have prior tickets by other admins that may have their resolutions in them. Hell, I have `history | grep keyword` to see what I did before. In an interview, I don't have those things. If those resources don't yield results, I have Google/StackOverflow/et. al. I don't have those in an interview. And when Google fails me, I have fellow admins sitting next to me, people far smarter than me on an internal IRC or a simple phone call away. In an interview I don't have those things.
I was asked another question, it was honestly something I had never heard of. Am I expected to know EVERYTHING? I asked "if you have a few minutes, I'd love to know". The response I got: "no, no, let's move on". Being told "no, no, let's move on", DISCOURAGING. The BEST interview I ever got was a Sr. Engineer interviewing me at my current job. He asked an obscure question I had NEVER heard of EVER and I told him "I don't know" -- I see no fault in admitting you don't know. Bullshitting your way through an answer is worse, people can often see you're bullshitting your way through it. What happened next? He said "come around here" and pointed at his computer and proceeded to go through the command, some common switches, and how they use it in the environment. HOLY SHIT! I'm LEARNING at an interview. HOW COOL IS THIS?! The geek in me loved this. I WANTED to work here. I work with some brilliant people, by all accounts one of my coworkers is a genius. It's amazing to watch him work, how quickly he is on a Dvorák keyboard. And what happens when you ask him how he just did what he did, or what he's doing now? He undoes what he did and starts over and SHOWS YOU! (full disclosure: sometimes he will resolve the issue cause he's >< that close and then goes through the steps again). THIS is how you learn!
The beautiful thing about IT/Technology. We're ALWAYS learning. Those who fail to continue to learn are doomed to fall behind. It's inevitable. Look around you, I'm certain you know someone like that.
The third part of my interview sent us to http://www.collabedit.com. I've written a handful of shell scripts (a few posted on this very blog), a couple of scripts/tools in Python. I've done some simple sed/awk/perl as needed. I AM NOT a programmer. I DO NOT have a scripting/programming background. I obviously want to change this, and do almost every opportunity I get. Automate ALL the things! I did write quite a bit of Powershell when I was at my last job. I'd write Powershell every chance I got for two reasons: 1) I loved it, 2) to piss my boss off (he would rather us do it manually and/or do it with VBscript). When asked to rewrite a Unix command in your favorite language, why would I? Someone already wrote it! Tools exist for this very purpose. Could I do it? Yes. Off the top of my head? Nope. I take a stepped approach to my scripts. Often simple one liners, piped to another one liner, piped, etc. etc. Then it goes into a function, out put of the function into another function or it's final command for output. I rarely sit down and write a script from start to finish in one sitting. I won't deny that I could be better at this, and I believe in time I will be. I also assume that any environment that has been around long enough, has likely automated their processes quite a bit, the need for me to automate processes are likely very slim to non-existent. Could I take a script already written and tweak it? Yes, I've done this. I will continue to do this as necessary/needed.
The Enlightment part from the title. Having been interviewed almost exactly how I interview, it scared me and shed light on my/the shortcomings of technical interviewing. I've always argued it's less about knowing the right answer and more about knowing HOW to get the right answer, often technical interviews focus on knowing the right answer and less on how to get the right answer. The best person I interviewed on my team said the one thing I wish all candidates would say "whatever I don't know, I can figure out with man and Google." She's absolutely right. Can you leverage the tools that exist in front of you to figure out what it is you need to do? The interview I had today, and often the interviews that I've done, don't allow a candidate to showcase this ability.
I don't expect a call back for a second interview. What was interesting though, I wrote down all the questions asked. When I hung up the phone, I put my Google-fu to work and I was able to answer all the questions in less than an hour. So I may not have liked how that interview went, but I AM confident that had those issues actually occurred in my environment or another environment, I'd be able/capable of resolving the issue(s).
[Review] Kindle Fire
Ever since I got rid of my iPad (first gen), I've been itching for an e-reader. Over 50% of my books and 99% of my technical books are in an electronic format. I do not like reading on a computer. A while back I purchased a Nook (e-ink). The obstacle I faced was a large collection of my e-books are in PDF format. I still don't know why publishers don't offer books in ALL the formats. This is largely why I love O'Reilly books. They have ALL the formats (most of the time). The books from O'Reilly's weren't the problems, the PDF's from smaller publishers were horrendous to manage. Between the Nook and my Android phone, I tried every possible thing I could try/find to put the PDF's in a format that produced an enjoyable to read format. Cut to the chase, the Nook was returned, there is still not an e-reader App on my phone.
Jump forward about three weeks ago now. Maybe a little further back, I see a Kindle Fire at the local Target. I'm intrigued. I play with it (the Kindle Fire) for a few seconds, I like what I see. The wheels were turning. Go back a couple weeks later, play with it some more and I think to myself, Amazon did a nice job with this. Thought about it some more, and decided WTF. $200, easy return policy. I AM prepared to return it. What can go wrong?
So, now about 3 weeks ago. It arrives. The packing leaves NOTHING to be desired. If you have ever unpacked an Apple, you will know what presentation is like. Kindle, exact opposite. Can't hate Amazon for this, they ship A LOT of packages daily, they've likely got shipping/packaging figured out. It essentially arrives in a plain brown box. Open it up, the Kindle and a USB cable. I wasn't impressed, but again, this isn't Apple, this is a $200 Kindle.
Let it charge, come back to it later, connected it to the WiFi, it knew who I was. There were my Kindle Books, my Amazon Cloud music and the apps from the Amazon App Store. Even had my Amazon Prime / Video On Demand content available for viewing. No doubt about it, Amazon built a perfect device for their ecosystem. (More on this later).
Firsts things first, I HAD to know, HOW does the Kindle handle/mange PDF-formatted e-books. THIS was why I bought it. PDF support would make or break this purchase. Amazon allows you to have an @kindle.com alias, you can e-mail documents to, it stores them in the Amazon cloud and the documents are available on the reader. I LIKE this! I e-mail one of my PDF books to myself @kindle.com. Few minutes later, I sync the Kindle. There is the book. No cover artwork, VERY ugly, but it's there. Function over fashion or something right? I open the PDF up, FAIL.
My heart sunk. SO SAD! Well F Me! If you've ever owned an iPad and you've e-mailed a PDF to yourself and opened it in iBook or iReader or whatever they call it, you'll know exactly what I'm talking about. It doesn't matter the format you're managing, it "just works". Apple NAILED this. And NO ONE HAS COME CLOSE! So what's the problem on the Kindle? Each page, appears almost like an image. Font too small, pinch-to-zoom action to zoom in. Little fiddling with it, fits page width, great. Turn the page, back to "normal". Pinch-to-zoom, fiddle, great. You see where this is going. Screw this cracker jack shh. I'm not fiddling with this. OK. The primary reason I wanted the Kindle Fire failed. Strike One.
But here is this multimedia gateway into all of my Amazon content. I'll admit I'm an Amazon whore. I have Amazon Prime, I buy 90% of everything I own on Amazon. I don't grocery shop, I subscribe & save on Amazon. Before Apple's iTunes had iCloud, I switched to Amazon MP3 because I hated how Apple managed their purchased items and the inability to download content more than once. So...Let's see how it does. WAY back in the day, I uploaded all of my music to Amazon's Cloud Music Player because I bought an album from Amazon and they gave me X Free GB (10GB? 25GB? Does it really matter?). So...hit 'Music' on the Kindle. BAM! Yay! My Music. I REALLY like the player, Android could take a cue from Amazon and "copy" the player (in the spirit of open source
). Too bad the speakers suck. Suck is a harsh word. They're not horrible. In fact, for simply having it on your desk, and listening to music, they're OK, just OK.
Oooooh...but I has Prime, so, that means I have movies, and I also have TV subscriptions to current TV seasons. Let's see what this is all about. It's AWESOME! As awesome as it can be with Amazon's crappy selection (or lack there of) of content. BUT because I have TV series subscriptions, I am able to watch those! THAT part is AWESOME! The screen is great. Good viewing angle (better than a gTab x100!). It does show a few smudges, but not horrible by any means. Yay me! I love this!
I'm not the social media whore I used to be. There was a point in my life (very shortly) I had ALL the social media who ha. Now, I use Twitter. Even being the Google whore that I am, I don't even log into Google+ anymore. Twitter is more than enough for me. So, I want twitter! Kindle obviously uses Amazon's App Store, which doesn't have everything the Android store has (this is good and bad). There is an "offical" Twitter app. Download/Install/Open. Fuuuuuu! It takes me to mobile.twitter.com. This is like Chrome "apps" that simply open a URL. Hey shit head! It's NOT an app! At least not to me. Strike Two. Bleh. Blah! It's HORRIBLE. Maybe a week goes by, and I get an e-mail from Amazon. "Thought you'd like to know, there is now an official Twitter app. Download now." YES PLEASE! In all honesty, it's the Twitter for Android tablet. I can't tell the difference between it and the app on my Thunderbolt. But WINNING! I now have a REAL APP for twitter. My want is fed.
Remember earlier when I said Prime's amount of content (or lack there of) sucked. So yeah. I has Netflix. I actually got a subscription as a gift (I wouldn't pay for Netflix streaming with my own money!). I've pretty much watched everything I'm interested in on Prime and my show is only once a week, so I'm caught up. Let's see if there is a Netflix app. There is! Fantastic. IT SUCKS! OMG. I tweeted "Congrats Microsoft, you no longer have to worry about Windows ME or Vista. Netflix app for Kindle is worse" or something similar. It's honestly as bad if not worse than memories of Windows ME/Vista. Who would put that shit out? I wouldn't want my name on such a piece of shit.
The Kindle Fire does have a dual-core processor, but only 512MB of RAM. No external SD slot to side-load content (I didn't say apps, yes it could be nice to side-load apps, but I want to be able to side-load CONTENT). Amazon simply says "use our cloud storage". With such little RAM, it DOES NOT nor do I think it was ever meant to multi-task. Much of that functionality in the OS seems to haven been stripped out.
Battery life is AMAZING. For an Android. I think they say about 7 hours of video, truth. Reading? Who knows? I've never used it as a reader. Casual use in bed before bed, DAYS. Leave it alone, DAYS. My gTab. My Samsung 10.1 Tab. Leave alone for a day, DEAD. DEAD, DEAD, DEAD, DEAD. Not the Kindle Fire. Amazon got this right.
If you've ever owned an Android, you'll understand when I say this. The Kindle is Android. Don't kid yourself, they put lip stick on a pig. It's still a pig. I like Android, so I don't care, but Amazon simply "skinned" Android. Nothing more. Their browser? It presents itself as Safari (not mobile) but doesn't have Flash 9, so I have run across sites that say "update to the latest version of flash" but there is no "Flash for Amazon Kindle" in the Amazon App Store. So it's better than an iPad in regards it does have SOME flash support, but it's not as good as something with newer version of Flash. But Flash is dead, Flash kills batteries. DEATH TO FLASH.
Final thoughts. It's OK. If you don't have a fair amount of Amazon content like I already do, I'd think money could be better spent put towards a full-fledged tablet. Though, it largely depends on what you want. I would NEVER call the Kindle Fire a tablet. A tablet it is not. It's an e-reader with support for other digital content. Maybe I'm weird, maybe it's how it allows me to sleep better at night, but it's an e-reader, not a tablet. I've looked at the Kindle side-by-side to the Nook Color. Though I think hardware wise the Nook Cool may be better, it also has external SD slot, you could argue the Nook Color is better. BUT the Kindle has access to more content. Again, it largely depends on what you own, and what you want.
Send an e-mail and attachments with Python
#! /usr/bin/python
import os
import fnmatch
import smtplib
import string
from email import Encoders
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEImage import MIMEImage
from email.Utils import formatdate
COMMASPACE = ', '
msg = MIMEMultipart()
msg['Subject'] = 'Weekly Graphs'
msg['From'] = 'bmorrison@tld.com'
msg['To'] = 'bmorrison@tld.com'
msg.preamble = 'Weekly Graphs blah'
PATH = '/home/bmorrison/graphs'
for path, dirs, files in os.walk(PATH):
for file in files:
fullpath = os.path.join(path,file)
png = open(fullpath, 'r')
img = MIMEImage(png.read())
png.close()
msg.attach(img)
s = smtplib.SMTP('smtp.tld.com')
s.sendmail('bmorrison@tld.com', 'bmorrison@tld.com', msg.as_string())
s.quit()
So basically I wrote this to gather files in a directory and e-mail those files. This is a VERY raw script, but it does work. I still need to do validation/error checking to ensure I don't send anything I don't want to. I also have a shell script that actually gets/creates those files, I'd REALLY like to do it all in Python. I don't get much time to dev at work anymore and I'm more into my Django project at home than anything else. I also need to shift my focus of my home project(s).
Geeky T-Shirts
With the start of my new, I have collected a small (~40) collection of t-shirts (most of the geeky sorts). A few people have asked me where I got them, thought I'd share.
http://www.tanga.com/products/relax-i-can-fix-it-t-shirt—9 << Daily Deal Site // Different T-Shirt every day
http://www.lolshirts.com << Most of mine came from here (Black Friday / Cyber Monday $5/$6 shipped!!)
http://shirt.woot.com/ << A few from here
http://www.thinkgeek.com/ << Have a couple from there
http://store.xkcd.com/ << Have one from here
I'm too cheap, but there are also some t-shirts from http://www.noisebot.com
For the NSFW shirts http://www.tshirthell.com/hell.shtml FANTASTIC place!!!
Good luck and enjoy!
A little bash: for-loops, arrays
I wrote this...the baby geek in me is proud. I know simple for you l33t hackers, but I am not.
#!/bin/bash
PROD=( PROD1 PROD2 PROD3 PROD4 )
STAG=( STAGING1 STAGING2 STAGING3 STAGING4 )
## DATES
fedate=`date +%m%d%Y`
fsdate=`date +%m%d%Y --date="1 week ago"`
enddate=`date +%m/%d/%Y`
startdate=`date +%m/%d/%y --date="1 week ago"`
## RESPONSE
for i in "${PROD[@]} ${STAG[@]}"
do
curl "http://server.domain.com/lib/page1.php?startdate=$startdate&enddate=$enddate&dataclass=SPEED&environment=$i" -o $i-response-$fsdate-$fedate.png
done
for i in "${PROD[@]}"
do
curl "http://server.domain.com/lib/page2.php?startdate=$startdate&enddate=$enddate&dataclass=REQUESTS&environment=$i" -o $i-requests-$fsdate-$fedate.png
done
for i in "${STAG[@]}"
do
curl curl "http://server.domain.com/lib/page3.php?startdate=$startdate&enddate=$enddate&dataclass=REQUESTS&environment=$i" -o $i-requests-$fsdate-$fedate.png
done
Configuring R1Soft Backups on Ubuntu after kernel upgrade
This is purely for my own sanity/sake of remembering.
$ apt-get install linux-headers-`uname -r`
then
$ r1soft-cki
2011 In Review
2011 was an interesting year to say the least. Not to say prior years were any less interesting, this one seemed to hold a lot of changes, some more significant than others. The biggest change for me in 2011 quite possibly was me leaving my job at The University of The Pacific after more than 4 years. I learned a long time ago, that life is too short to be unhappy, and even though change may be inevitable, it rarely happens when we need it to, and in those circumstances, it's simply best to MAKE change happen. I struggled with leaving for personal and professional reasons. I was VERY good at my job, more time there would only allow me to hone the skills I possessed and gain more skills. Professionally, it made A LOT of sense for me to stay, and was the primary motivation for me to stay. I had also created MANY friendships and business relationships with individuals because of my job. MANY I hope to maintain even after my departure. Personally, it would have been the death of me (quite literally!). The amount of anger and stressed bottled up, day-in and day-out was most certainly not healthy.
It was scary to think about leaving, it was scary to interview again (after more than 4 years) and it was scary to say good bye and take a risk with a new company (especially with how secure my job was -- in this economy). But it's also exciting. Looking for a job shows you the possibilities, getting to interview puts you in the hot seat, and even though I suck at interviews, it was fun! I essentially interviewed for 4 companies. The first a game company, they were looking for a jr. Linux admin, I was looking to jump ship from Windows to Linux. The phone screen went well, but it wasn't meant to be as HR didn't move fast enough, and no official position existed, so as much as I loved what that job could/would have been, it simply was not meant to be. The second potential job was for another university. This would have very much been a lateral move for me. Though I worked for central-IT for The University of the Pacific, this role was for a department, that part wasn't something I was looking forward to, but their environment was new and well built, with great hardware, small team, latest and greatest. I could have been very happy there. It was a combination of reasons why I didn't choose to go there, but whoever does get the position. The third company was a financial broker in San Francisco's financial district. VERY COOL! I always thought it'd be neat to work "in the city". The commute was VERY easy (quick 45-minute train ride and 5 minute walk). It was 100% Windows-based environment, I could have walked in and been right at home. It was more app-level support and less infrastructure, not that that's a bad thing. It was purely a gut feeling not accepting that position, though the salary was enticing to say the least! The fourth company was for a technology company in the Silicon Valley. Luckily I had an "in". Interview was by no stretch of the imagination easy, but those that interviewed me, I knew I wanted to work for/with, as the opportunity to learn would be endless. The hiring recruiter and my "to-be boss" said something to the effect of "we don't care who you are, what you look like, what you wear, we have people from all walks of life, we simply want the best person for the job." I felt at home, before I even had an offer. And boy did I have to wait for an offer!!! TOO stressful!!!
None the less, they did make an offer...I obviously accepted. I've been there almost two months now and couldn't be happier. AMAZING! You might be asking "where is this fantastic place?!" I'm not telling. It's simply easier this way. Trust me. So you might be asking "What are you doing?!" My official title is Linux Systems Engineer. I manage hundreds of Linux servers around the world. Well I don't personally, me and a team of 10 others do. So yeah. The bad (cause life ain't all rainbows and unicorns), I don't touch storage, I don't touch virtualization. I simply touch servers! It's also unlikely I will get to see/touch new technology.
I went through another car/truck. The Corvette was a love/hate, replaced with a 2007 Trailblazer 3SS. No matter what anyone tells you, mileage sucks! 13MPG on a good day, 10MPG on average, 8MPG on a bad day! The TBSS went away as I got tired of high gas prices, premium gas and shitty mileage. It seems I go through these periods of my life where I simplify. This was certainly one of those years. I've ended up in a 2012 Chevrolet Cruze Eco. I know! VERY drastic change from a C5 Z06 or a TBSS. Trust me! I KNOW! It's a nice car for what it is, anyone who needs a nice commuter, or a first car for a teenager, I'd recommend it. I did get mine with a manual transmission (as I missed it from the Corvette). Driving in the city is NOT as bad as I thought it would be, no regrets there. It is unlike any other manual I've ever driven. STILL getting used to it, even after a few months.
Personally, I wish I could say 2011 was as good for me as it was good for me professionally, but I continued to struggle with the loss of someone I cared about more than I cared about anyone else. No, she didn't die, though sometimes I think it'd be easier if she had, as I believe death is a part of life and easier to get over. Her being a part of my circle of friends (or what was my circle of friends -- another reason I moved, I didn't want the reminders in my life) made it more difficult. It taught me a lot about myself, good, bad, or otherwise. I wish this feeling upon no one (well maybe just one person). Through all of it, it taught me who my real friends were, and for that I am thankful. I ended 2010 haven gotten a dog (Louie). He's come a long way since I got him, still a ways to go, and he'll never be "normal" simply because of the life he had before I got him. It's been a love/hate and regularly a struggle between the two of us (with me not always winning), but he's been good for me, and I wouldn't/couldn't let him go...so he's here (for now).
I put on all the weight I lost (and then some) in 2008/2009. This has obviously not been good. I really hope 2012 leaves behind the things it needs to and brings the things it needs to so I can get back where I was and move forward. If for no other reason than to be healthier. I should probably also start cooking again. For a number of reasons: 1) it's obviously healthier 2) it's INSANELY cheaper (when done right)!
I want to be healthier and happier in 2012. I've been given an amazing opportunity financially and I don't want to waste it...so I want to be smarter with my money. I may not have many friends left, but the ones that I do, I want to appreciate them more, joke less (to ensure I keep them) and maybe make new friends. I also haven't been back to CO since my grandma passed away. I need to go home. But I'd also like my family to come out here and see the life I have here. It's a simple life, but it is my life and I like it. I'd also love to get knee deep in a project (whatever that may be). I want to get more in-depth with Python. Maybe jump back into xHTML/CSS/JS as I miss that. But whatever I do, I need to be focused and see it through to the end.
2011 was most certainly NOT the worst year of my life. I guess this would be the upswing (at least I hope it's the upswing!).
[Brain Dump] Arduino + Python & Serial
I've started playing with Arduino, I've always been fascinated with it. AND having been slowly teaching myself Python, why not try and make the two talk to each other? Tonight (10/15/11) I found success! Now, it's nothing spectacular. A simple LED on my breadboard, two Python scripts (one passes '0', the other passes '1'), based on the value sent via serial, an LED will light. None the less, these links below proved VERY valuable. LOTS to learn, but well on my way!
http://www.arduino.cc/playground/Interfacing/Python
http://www.akeric.com/blog/?p=1015
http://www.akeric.com/blog/?p=1140
http://www.tigoe.net/pcomp/code/communication/interpreting-serial-data-bytes
http://www.arduino.cc/en/Reference/ASCIIchart
http://www.asciitable.com/
http://principialabs.com/arduino-python-4-axis-servo-control/
New HTML5-boilerplate Stylus CSS
A previous (older) version exists here. Like the previous version All comments were left in the style sheet. All credits go to the original authors. All I did was convert to Stylus since that is what I'm using with Express. I HAVE NOT tested this. I simply converted it and stuffed the comments back inline.
/*
* HTML5 ✰ Boilerplate
*
* What follows is the result of much research on cross-browser styling.
* Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal,
* Kroc Camen, and the H5BP dev community and team.
*
* Detailed information about this CSS: h5bp.com/css
*
* ==|== normalize ==========================================================
*/
/* ============================================================================
HTML5 display definitions
========================================================================== */
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section
display: block
audio, canvas, video
display: inline-block
*display: inline
*zoom: 1
audio:not([controls])
display: none
[hidden]
display: none
/* =============================================================================
Base
========================================================================== */
/*
* 1. Correct text resizing oddly in IE6/7 when body font-size is set using em units
* 2. Force vertical scrollbar in non-IE
* 3. Prevent iOS text size adjust on device orientation change, without disabling user zoom: h5bp.com/g
*/
html
font-size: 100%
overflow-y: scroll
-webkit-text-size-adjust: 100%
-ms-text-size-adjust: 100%
body
margin: 0
font-size: 13px
line-height: 1.231
body, button, input, select, textarea
font-family: sans-serif
color: #222
/*
* Remove text-shadow in selection highlight: h5bp.com/i
* These selection declarations have to be separate
* Also: hot pink! (or customize the background color to match your design)
*/
::-moz-selection
background: #fe57a1
color: #fff
text-shadow: none
::selection
background: #fe57a1
color: #fff
text-shadow: none
/* =============================================================================
Links
========================================================================== */
a
color: #00e
a:visited
color: #551a8b
a:hover
color: #06e
a:focus
outline: thin dotted
/* Improve readability when focused and hovered in all browsers: h5bp.com/h */
a:hover, a:active
outline: 0
/* =============================================================================
Typography
========================================================================== */
abbr[title]
border-bottom: 1px dotted
b, strong
font-weight: bold
blockquote
margin: 1em 40px
dfn
font-style: italic
hr
display: block
height: 1px
border: 0
border-top: 1px solid #ccc
margin: 1em 0
padding: 0
ins
background: #ff9
color: #000
text-decoration: none
mark
background: #ff0
color: #000
font-style: italic
font-weight: bold
/* Redeclare monospace font family: h5bp.com/j */
pre, code, kbd, samp
font-family: monospace, serif
_font-family: 'courier new', monospace
font-size: 1em
/* Improve readability of pre-formatted text in all browsers */
pre
white-space: pre-wrap
word-wrap: break-word
q
quotes: none
q:before, q:after
content: none
small
font-size: 85%
/* Position subscript and superscript content without affecting line-height: h5bp.com/k */
sub, sup
font-size: 75%
line-height: 0
position: relative
vertical-align: baseline
sup
top: -0.5em
sub
bottom: -0.25em
/* =============================================================================
Lists
========================================================================== */
ul, ol
margin: 1em 0
padding: 0 0 0 40px
dd
margin: 0 0 0 40px
nav ul, nav ol
list-style: none
list-style-image: none
margin: 0
padding: 0
/* =============================================================================
108 Embedded content
109 ========================================================================== */
/*
* 1. Improve image quality when scaled in IE7: h5bp.com/d
* 2. Remove the gap between images and borders on image containers: h5bp.com/e
*/
img
border: 0
-ms-interpolation-mode: bicubic
vertical-align: middle
/*
* Correct overflow not hidden in IE9
*/
svg:not(:root)
overflow: hidden
/* =============================================================================
Figures
========================================================================== */
figure
margin: 0
/* =============================================================================
Forms
========================================================================== */
form
margin: 0
fieldset
border: 0
margin: 0
padding: 0
/* Indicate that 'label' will shift focus to the associated form element */
label
cursor: pointer
/*
* 1. Correct color not inheriting in IE6/7/8/9
* 2. Correct alignment displayed oddly in IE6/7
*/
legend
border: 0
*margin-left: -7px
padding: 0
/*
* 1. Correct font-size not inheriting in all browsers
* 2. Remove margins in FF3/4 S5 Chrome
* 3. Define consistent vertical alignment display in all browsers
*/
button, input, select, textarea
font-size: 100%
margin: 0
vertical-align: baseline
*vertical-align: middle
/*
* 1. Define line-height as normal to match FF3/4 (set using !important in the UA stylesheet)
*/
button, input
line-height: normal
/*
* 1. Display hand cursor for clickable form elements
* 2. Allow styling of clickable form elements in iOS
* 3. Correct inner spacing displayed oddly in IE7 (doesn't effect IE6)
*/
button, input[type="button"], input[type="reset"], input[type="submit"]
cursor: pointer
-webkit-appearance: button
*overflow: visible
/*
* Consistent box sizing and appearance
*/
input[type="checkbox"], input[type="radio"]
box-sizing: border-box
padding: 0
input[type="search"]
-webkit-appearance: textfield
-moz-box-sizing: content-box
-webkit-box-sizing: content-box
box-sizing: content-box
input[type="search"]::-webkit-search-decoration
-webkit-appearance: none
/*
* Remove inner padding and border in FF3/4: h5bp.com/l
*/
button::-moz-focus-inner, input::-moz-focus-inner
border: 0
padding: 0
/*
* 1. Remove default vertical scrollbar in IE6/7/8/9
* 2. Allow only vertical resizing
*/
textarea
overflow: auto
vertical-align: top
resize: vertical
/* Colors for form validity */
input:valid, textarea:valid
input:invalid, textarea:invalid
background-color: #f0dddd
/* =============================================================================
Tables
========================================================================== */
table
border-collapse: collapse
border-spacing: 0
td
vertical-align: top
/* ==|== primary styles =====================================================
Author:
========================================================================== */
/* ==|== media queries ======================================================
PLACEHOLDER Media Queries for Responsive Design.
These override the primary ('mobile first') styles
Modify as content requires.
========================================================================== */
@media only screen and (min-width: 480px){
/* Style adjustments for viewports 480px and over go here */
}
@media only screen and (min-width: 768px){
/* Style adjustments for viewports 768px and over go here */
}
/* ==|== non-semantic helper classes ========================================
Please define your styles before this section.
========================================================================== */
/* For image replacement */
.ir
display: block
border: 0
text-indent: -999em
overflow: hidden
background-color: transparent
background-repeat: no-repeat
text-align: left
direction: ltr
.ir br
display: none
/* Hide from both screenreaders and browsers: h5bp.com/u */
.hidden
display: none
visibility: hidden
/* Hide only visually, but have it available for screenreaders: h5bp.com/v */
.visuallyhidden
border: 0
clip: rect(0 0 0 0)
height: 1px
margin: -1px
overflow: hidden
padding: 0
position: absolute
width: 1px
/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: h5bp.com/p */
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus
clip: auto
height: auto
margin: 0
overflow: visible
position: static
width: auto
/* Hide visually and from screenreaders, but maintain layout */
.invisible
visibility: hidden
/* Contain floats: h5bp.com/q */
.clearfix:before, .clearfix:after
content: ""
display: table
.clearfix:after
clear: both
.clearfix
*zoom: 1
/* ==|== print styles =======================================================
Print styles.
Inlined to avoid required HTTP connection: h5bp.com/r
========================================================================== */
@media print
*
background: transparent
color: black
box-shadow: none
text-shadow: none
filter: none
-ms-filter: none
a, a:visited
text-decoration: underline
a[href]:after
content: " (" attr(href) ")"
abbr[title]:after
content: " (" attr(title) ")"
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after
content: ""
pre, blockquote
border: 1px solid #999
page-break-inside: avoid
thead
display: table-header-group
tr, img
page-break-inside: avoid
img
max-width: 100%
@page
margin: 0.5cm
p, h2, h3
orphans: 3
widows: 3
h2, h3
page-break-after: avoid
