Jeffkillian.com initially started as a Geocities website when I was in 6th grade. Over the years, it has slowly evolved into a place where I can practice and become familiar with web development as it progresses. I started out coding with Microsoft Frontpage, then moved to Dreamweaver. Initially, there was very little coding, and it was all WYSIWYG. However, as I learned more, I could make it more interactive.


I incorporate drawings and blog posts to keep those that are interested updated. Through the evolution of the website, I was forced to learn HTML, PHP, CSS, XML, jQuery, javascript, and the handling of MySQL Databases. I've put online some code samples.
CLOSE
Subject:
Message:

SUBMIT
B.O.B vs. Bobby Ray - Where Are You Guitar Cover Chords and Tabs

I've been listening to the new B.O.B album, and thought one of the songs might sound good to play on guitar. I couldn't find the chords or tab online, so I messed around a bit and figured them out.

I play it with a capo on the first fret so that the one time I need that first fret pushed it already is. It doesn't matter if you have a capo seeing as you never play any open strings.

I use bar chords but wrap my thumb around the neck to hold the low E (demonstration video).
The picking pattern I use is very similar to the one used in "Stop this Train". You can find a youtube tutorial here.

F# : 204320
G#: 406540
G#/A: 564544
A#m :688666

If you find the G#/A is too hard, you can use a modified version: 506540
The X on the low E string represents a slap as you strum the string with your other fingers (like in the Stop this Train video).

____F#____________________G#________________________
E|-----------1--------------------------------------
B|--2-----2--------2------4-----------4---------4--
G|-----3------------------------5------------5------
D|--------------------------------------------------
A|--------------------------------------------------
E|--2-----X-----2-----X------4-----X------4-----X---

____G#/A____________________A#m____________________
E|-----------------------------------------------
B|--4-----4--6-----4-----------------------------
G|-----5-----------------6--------6--6--------6--
D|-----------------------------8-----------8-----
A|-----------------------------------------------
E|--5-----X-----5-----X-----6-----X-----6-----X--

Here's the video to help:

Charles Ingram Cheats on Who Wants to Be A Millionaire

Youtube is a dangerous place. Every so often when I decide it's time to go to bed, I shut my laptop down so there is a physical barrier between me and the internet. However, the problem is that I then clibm into bed and start browsing on my phone. I was doing this the other night, and stumbled upon a video about Charles Ingram, who cheated his way to the million dollar question on the British version of Who Wants to Be a Millionaire. I've embedded the first part below, and have links to the rest of the show below that. Included at the end of these videos is his full run from the first question to the final answer.

Part 2, Part 3, Part 4, and Part 5

Timeline of the Far Future
I thought this wikipedia article was really cool. It's about predictions of things that will happen in the very distant future.
My Bad
I changed the CSS of the site for April Fools, and then totally forgot that I had to change it back. My bad.
Spring Break - 2012

I got back from spring break last weekend. It was a blast. I went with a lot of my friends, and it was a great way to spend some time together as we near the end of Senior Year. We drove from school to Panama City Beach, Florida, where we stayed for about 4 days, and then we spent the remaining 3 days in New Orleans, which was absolutley mindblowing.

The drive to PCB was overall about 12 hours (with a stop in the middle to rest up before we continued the next day. Here we are after arriving (our hotel is in the background). Panama City Beach was unreal in that, it was crammed with tons of college students. I guess I should have expected this given that it was the second most suggested place to go for spring break. Initially we were going to go to Destin, Florida, which would have been a bit chiller. However, after spending some time in PCB, I'm glad we went there. It was good to finally get the true college spring break thing (lots of studying and trips to museums) done and out of the way.

New Orleans was also pretty cool. We had a bit more downtime there, because it wasn't so packed with beaches or things to do, so we got to relax a little and take in the sights. We experienced Bourbon street (again, there were lots of places to study along it). We no longer had to sleep two to a bed, but we each had our own bed which was a surprise. However, despite asking for it when booking the hotel, no rosepetals were to be found on the beds.

Degian, Josh and I had decided beforehand that, on the day we were going to drive home, we should do skydiving. I'll make a post about it later once we get the actual vidoes, but for now, just know that it was pretty freaking fun.

Twitter Bot

I get a lot of random ideas for programs that I could write simply to test my knowledge of coding/see what I can come up with. One of these was a twitter bot (you'll find out for whom later). I had never really messed with twitter other than briefly signing up, but I figured I'd give it a shot and see what I came up with. I looked into a fair amount of different solutions, but a lot of them just were not plausible. There were two main things that had to be done:

Problem 1: Write a script that would post some sort of content to twitter
Problem 2: Be able to run this script every so often automatically.

Basically, when all was said and done, I wanted to be able to sit back and just let my account tweet by itself. I looked around for some solutions and came upon this page, which uses OAuth (via php) to post to twitter utilizing the Twitter API. This solution wasn't exactly what I was looking for, and to implement it I needed to use cURL which was not supported by my server. After many failed attempts and hours of googling, I developed my own sort of roundabout way of doing it. It is not the most efficient way, but it definitely gets the job done.

To solve Problem 1: Taking advantage of the php mail() function, I set up a webpage that, when visited(and given a certain passcode so that random bots cannot set it off), automatically sends an email to a twittermail account. Twittermail is a service that takes in an email and posts the contents to your twitter feed. I take the content that I want to tweet, and send it in the email. However, this does not simply happen automatically.

To solve Problem 2: I knew I could utilize Cron from the server and set it up to fire every so often, but I did not want to risk messing up the server in getting that to work (I am using a friend's server and try to err on the side of caution if possible). The solution I found was to use Windows Task Scheduler. I didn't have to download an extra program and have it running all the time, I just used the generic task scheduler that was included in Windows. The scheduler runs a python script which read the contents of the webpage every 30 minutes (thus firing an email to twittermail). The only downside of this is that, every 30 minutes, a command prompt window pops up on my screen for about half a second. Also, the tweeting only occurs if my computer is on. However, it is working well so far.

And that was it. I got to learn about task scheduler and reinforced some knowledge of php and python. I also learned a fair bit about the twitter API, though I did not end up using it. I haven't posted what the twitter account is because I actually made it for a friend, which makes it appear as though she tweets random crazy things. There's no connection to the friend unless you know what to search for, but I'm waiting until the bot has tweeted a bit more before I reveal it to her. I'll post a link to it when I do.

EDIT: I've been discovered. Link

Sketch
Daft Punk - Aerodynamic Banjo Tab
I was looking for a banjo tab for the solo in Daft Punk's Aerodynamic and couldn't find it, so I tabbed out the first four patterns in it. Maybe one day I'll do the rest, but this is a good start for anyone who is looking.

D|--0-----------
B|--------0----- x4
G|--------------
D|-----4-----4--


D|--0-----------
B|--------0----- x4
G|--------------
D|-----6-----6--


D|--5-----------
B|--------5----- x4
G|-----4-----4--
D|--------------


D|--2-----------
B|--------2----- x4
G|-----2-----2--
D|--------------

Also, apparently I'm not the first to figure out the tabs, though I can't find any posted online. However, this dude isn't using the same chords that I did. I just figured it out by ear, but they both sound pretty similar.
Cube Roots

A while back somebody introduced me to a website where they taught you how to do cube roots of 6 digit numbers in your head. The only criteria was that the cube root had to be a whole number. For instance, if I was given 250, 047, I could say that the cube root of that was 63 in a matter of seconds. It's a pretty easy formula, and it goes as follows:

i i3 ones digit(k)
0 0 0
1 1 1
2 8 8
3 27 7
4 64 4
5 125 5
6 216 6
7 343 3
8 512 2
9 729 9

All you have to remember is the cubes of the single digits, which you can see in the table. The next step is to realize that each single digit cubed ends in a unique one's digit(0 and 0, 1 and 1, 2 and 8, 3 and 7, etc), and you must memorize that number associated with the cube. To get the initial number that was cubed, j ,you do two steps (one to get the tens digit and one to get the ones digit). To get the ones digit of the initial number, you look at the ones digit(call this k) of the cubed number(j3), and take the j which, when cubed ends in k. To get the tens digit, you simply look at the thousands, tenthousands, and hundred thousands digits of the cubed number. Interpret these as a three digit integer between 0 and 999, and find the number in the second column which is closest to without going over that number. The i that corresponds to that cube is the tens digit of your initial j.

In summary: Get ones digit by looking at the ones digit of the given cubed number. Get tens digit by looking at the floor of the cube root of the thousands, ten-thousands, and hundred-thousands digits (when combined) of the number.

For example, if we are given 148,877. We first look at the ones digit, which is a 7 (bolded). Looking at the table, we go to the third column where 7 is, and move over two columns to obtain 3, which we now know is the ones digit of the initial number. Next, we want to get the tens digit, so we look at the numbers in the thousand, tenthousand, and hundredthousand column, which are 148. Looking at the second column, we see 125, or 5 3, is the highest we can get without going over 148 (216, which is 63) is too high. So that means 57 is our answer, and 573=148,877. I wrote a TI-83 application in high school to do this, but I threw a quick java program together to help if you wanted to practice.

This page has a good explanation of the process, as well as extends it to finding cube roots of 9 digit numbers.

Overlapping Squares

A friend brought up the question of "How do you determine if two randomly generated squares (or rectangles) are overlapping?" I had to do this in a java class before, but it was a while ago, so I thought I'd revisit it. I'm sure there are some answers online, but I wanted to take a stab at it before I looked at others' solutions.

Previously (in my java class), we had been given the two diagonal corners of the shape, and had to check to see if it overlapped with any other shape (there were lots of squares on our plane). In our solution, there were three possible options. For two shapes to be overlapping, one of them must either contain one, two, or all four corners of the other. Therefore, we had a function with an equation satisfying only those points within square 1, and we tested each corner of square 2 to see if any corner coordinates satisfied. If only one corner did, we knew only one corner was in. If two corners returner, we knew it was partially in. Four meant the entire square was contained within the other. Lastly, if none of this returned true, you pick a corner of square 1, and test whether it is in square 2. If this were true, that would mean square 2 were entirely within square 1.

However, when my friend posed the problem, she did not have the corner coordinates. Rather, the program she was using would generate squares based on a center coordinate. Her eventual goal was to create a randomly generated city block with buildings, and she wanted to ensure no two buildings overlapped. As long as two bases never overlapped, no two buildings would either. For simplicities sake, we assumed that all buildings were square.

If all buildings were square and we only had a center point (and length to the edge from center, aka half the width/height, referred to as "w"), the simplest idea is to draw a circle with radius sqrt(2w*w). This would result in a square perfectly inscribed within a circle, as seen in the image below:

Every time you create a square, you could generate this circle, and check for two things:
1) the circle surrounding your newly created square doesn't overlap edges with any others. You would check this by setting the equations for the two circles equal, and verifying no solutions.

2). The center of your new circle is not contained within any other circle. You would check this by seeing if the center of this new circle satisfies the comparing circle's equation, but using an inequality (less than or equal to instead of equal to) in order to get all circles contained within.

This is not the most efficient way, however, for there is extra space that isn't technically in a square, but we are restricting. You would be less likely to find two closely adjacent squares because the area in the circle that is not in the square would be prohibiting this. Another option proposed was to calculate the points of the corners, and then use the method first described. Because she only needed to generate a city block or so, we weren't too concerned with the time it took to generate. Because she isn't at the project where this needs to be written, our conversation moved onward. However, I'm sure I'll approach this later, as it's a pretty interesting puzzle. I'd like to focus more on optimization of a way in order to minimize resources used.

Want more? Check the blog archives
Untitled Document