Friday, February 24, 2012

Politeness in the Digital Age

As I spend more time on Google Plus I am starting to see some very annoying trends. People are not very polite.  I love the whole concept of making connections and getting to know people all of the world, and have been doing so online since 1996.  Back when I started, people knew how to be polite and they took the time to do so.  We had way fewer tools then than we do now, yet we still managed to have lasting friendships.  
Since I figure it would be rude of me to hold it all in and not help other people learn, I would like to share the following tips for communicating with an American on Google Plus.


1.   First and foremost:  Do not start a chat with someone if you have not read their profile.  
1a. Don't ask me where I'm from. It is in my profile.  I don't mind discussing my location, but please know where I live before you decide to discuss it.  In fact, I don't even mind if you show up at my door.  I am more than happy to entertain guests and meet new people.  I can't promise I'll be wearing clothes when I answer the door though.
1b. Don't ask me if I am a male.  It is in my profile.  Also, there is no good reason to open up a discussion with a stranger by asking their gender.
1bA. Please make sure you are aware of my gender before you start flirting with me.


2.  Use full complete sentences.  Do not use txt speak.  I don't care if you are chatting me from a mobile, take the time to type it right. This is especially true if you are in any line of professional work.  Saying "Hw r u" is the equivalent of asking a pregnant woman if she has enjoyed gaining weight. You just don't do it.
2a.  If you don't include vowels in your words, it is likely I will return the favor.  t mks t vry hrd t ndrstnd smtms. Ls, t ts annng.  N th pls sd t svs wr nd tr n th l' kbrd.


3.  If English is not your first language then please be understanding and make sure you are saying what you think you are saying. 
3a.  I will try to do my absolute best to return the favor.  If you are not sure of what I said or meant PLEASE do not hesitate to ask for clarification.  I don't mind.  In fact, I appreciate it.  People who grew up speaking American English don't understand me, so I sure don't expect someone from another country to.
3b.  I do my best to act like a stupid American (hey, I live here, might as well get some benefit out of it), but believe it or not I love learning your language.  I would love simple sentences in your language so that I have a chance to learn.  I am horrible with languages so I probably won't be able to learn, but I still like to try!


4.  Related to #1 above, please remember what time zone you are in and compare it to the time zone I am in.  The chances are good that I will not be available to chat if you msg me at 09:00 UTC.
4a.  I am currently working on developing programs for Android phones.  As such I own 8 different devices which no matter how hard I try, love to sign into G+ all hours of the day regardless if I am awake or sleeping. Given that it is also hard to remember to mute all of them, if you chat me when I am asleep you will almost certainly wake me up.  I'd really prefer it if you didn't. Especially if you did not follow tip #1.


5.  Spam.  Why spam.  Do you people really need to ruin this wonderful thing called Google Plus?  I have received several tags where the messages all say the same thing but in different languages.  I am on to you.
5a.  If are not a spammer, but feel compelled to ask how I am by tagging me then PLEASE start off in English.  "Ahoj, +Jeff Feely, co je novĂ©ho?" Is not useful.  Neither is, "Ehi, +Jeff Feely, come va?" or even "Hi +Jeff Feely, how're you?".  Unless I am missing something they all mean the same thing and make me think that someone is probing for something or something.  I'm on to you.


6.  I really do appreciate all of you who have followed me.  I will do my best to circle you back, but it usually takes a while.  I even have special circles for people who I have no clue who you are or how we are connected. It works great.  Actually, I have three of them now.  Crazy.
6a.  If you post animated Gifs I am un-circling you.  They are really bloody annoying and 99.99999% aren't worth watching unless you are a male 8 year old who thinks bathroom humor is the most amazing thing in the world.


7.  Last but not least.  Tagging.  Please don't tag me if there isn't any direct reason to do so.  I really am not interested in your economical report you wrote in college.  Please don't tag me in photos if I or someone I know is not in the photo.  The chances are extremely good I have already seen it as the main thing I do on here is look at the photo stream (I leave it open on one monitor while I program).
7a.  On the off chance you want me to critique a photo, please ask me first.  I will be more than happy to do so, or answer any questions.  Please understand that I will be brutally honest though.  I don't see any point in critiquing artwork if it doesn't help the author learn in someway.  Please understand that I generally look at thousands of pictures a day so if I don't share an emotional response such as "I love it" or "I like what you did there" don't be hurt.  Conversely, if I do then please take to heart that I meant it.  I am not fake.


If you read this far, then thank you.  I hope I will have the chance to talk to you some day.

Wednesday, January 25, 2012

Encrypting Transmissions between JavaScript and PHP Part 3: Decrypting with PHP

Welcome to Part3 of Encrypting Transmissions between JavaScript and PHP.  You can see the previous parts at: Part 1 Part 2

There are just four easy steps to go through in order to decrypt the string from Part 2.
As with JavaScript, let's start off by getting the private key loaded into PHP.  Oddly enough, you can do it exactly the same way:


$key = "-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA3sZto3ZI4vmtMv0Vx+OaliJ/EeVnQ7R+rX8bya+zzoI/S2f7
gD+K/xNK/AD6RZ0Q1dgJ8+Nl1N+DLyDzWvLoFTNbmNJeo+j3VM5I0xXpWeETMtRG
cYysogZILprICezZM5CfC7awAh36xJD35v6mXkwWkAq2QShQDApMJyoFJI2x9DeD
oRIwgMh5pWSaNsfFRJqGaNhWHPZNILkc/PfEeI3JZEjYO7+Bpdgo7VD5jbbPv7R1
xtwko1IClhgPA3jizuQJQnaJL9G6T+MjStXG5mdfnz2oTKBOIFMzblHSlqOYDnhP
7Jbh0x0xE5dPaQQ0fsMxJqWEkDNIcfhWv8BkfQIDAQABAoIBAQCf1AcXDqcOSQlN
GqyEw7PF4Sv/f/GNbrKv8RDTq346O9IDXK/g/DXR+VqD4IOubBiHA79oPg5yIoXw
yxgteTau9zDRPKTvvhWsv28aGo9Xj5aBkjCUCNRWTmF9Jkk8bbQLPcgN1F0Et9OR
MVzaWnqsDrTlVPobVzvO15h5RLl51eOZDHZ1enrIR6gqVksloyVfoWY15Vhdx89k
jbcJ7EMvhQRLZZwIWoP1YIeP/JkREiMju8dMFGazhagZ/ejScCXy+M0LdHMe0Ow2
g5Sx9XYTxCBDj2ReONzVxiih7ZfB0QBT3+ITZIHkEbmXx93azZ98C5v5txTfxBLO
gIN0k1QBAoGBAP8t27t5qMwpEo8dZADo0NC7+qCusENMo4v2YWkyqdYTH2tLNwFK
PpbDuYuqqBClpbKKgUvQOsVaIWRM8Y58r9LiOQTHRfOmYI5W7b9uAj4t2DXP35wj
SdoSV8cBusf/bHd1w8nSAf16e2d5LmFnvIg5zmad8m5vyiWYjE64/8d9AoGBAN99
4pDXrmJ1yMNQVCeT9X2UxG56T18JnxCywE5rSJK5/uPnAGi6d20FV/JDpPe07hOv
lvJzcbYYWvPB0bVw1TkteJsVRmGWo7rwqBpNkofcBNOaEQivOYwv5Yiz97OB5URR
umYauFGI4PUrDH+jn+rlIW/TNtIpkwHqzKgzZ6EBAoGAR4bRKrGlUOTKYPc6Cs83
iOrIC7YrjhGzXg4Hq/cZh/oAOpDwsBnhhV0Da1TAmznzQiJ0r42Ei8EBzx2KMAhf
OFtU5DP/NZaTRhKzvY7WbhtnmV3VLezuTIQLuqqPcnP0MV//K1kEWcq1QIHFMGRl
gkHByx3G0JHhNbyWx5Ivj/kCgYBh5F/zFaXalsDjXDIgS9zBrwIDaiuN80brJ4C4
WKGnMzUEWlCBjvt0k1ycTyjZHzURBl5VwF9UZYKhNopGsS+UJein9T+oyzTYU0Uu
kD/YpnSuwtMnPKk2UFx37mxXAlSMAkhlJNsLS6tNeBe3aNJJLyfgNWHT2EX+Fvyh
yDJiAQKBgFnLzyAWgIECvCmBGmwAl/QK6/6w0P4CEBBt2lBTFB0dFrlkuVC2/DSY
ZLhUMtynmYZEaEreIOJqMXQfHbTUODRVrTfyKVdjvExS5SiwWENYLY/5n+lacZ/b
7iUXpuQdQPttce9IKxqo0DVg7dy7WzmFYGwCfTBTAxvaWvwFc6Pu
-----END RSA PRIVATE KEY-----";
I probably should have used a shorter key length for the demo.  Oh well.  Oh, a word on security.  Embedding your private key actually is a problem if you aren't being extra careful.  It might be wiser to read your key in from a file.  You can find documentation on how to do this in the PHP OpenSSL Documentation.

Next we utilize the PHP OpenSSL library to convert the key string into a resource.
$res=openssl_pkey_get_private($key); 
If you chose to password protect your key, the syntax would instead be:
$res=openssl_pkey_get_private($key,'password'); 
The final two steps are to Base64 decode and decrypt the encrypted text.

$text=base64_decode($_POST['encryptMe']);
openssl_private_decrypt($text,$decryptedText,$res);
That is it folks.  Your decrypted text is now in $decryptedText. Unless something went wrong.  In which case, good luck.

Encrypting Transmissions between JavaScript and PHP Part 2: Making JavaScript encrypt the right thing using the right thing

So now that we have the keys from Part 1 we can start setting up the JavaScript portion of our party.  If you have done a search for "Javascript RSA" you have probably found several different libraries that will implement it for you.  Of particular note are:
https://ziyan.info/2008/10/javascript-rsa/ and http://www-cs-students.stanford.edu/~tjw/jsbn/
The former is a modified implementation of the latter.  For the sake of this post we are going to use the former. For my own personal use I modified the code a little bit to make it more readable and so I could understand it better, but it doesn't change the way anything works so I'm not going to include it unless anyone wants it.

You will want to download the files rsa.js and jsbn.js and include them on your web page the way you normally do such things (i.e. <script language="JavaScript" type="text/javascript" src="jsbn.js"> and <script language="JavaScript" type="text/javascript" src="rsa.js">).

First and foremost we need to set things up to use the key.  How do we read that into JavaScript? Nice and simple, we cut and paste.


var pem="-----BEGIN PUBLIC KEY-----\
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3sZto3ZI4vmtMv0Vx+Oa\
liJ/EeVnQ7R+rX8bya+zzoI/S2f7gD+K/xNK/AD6RZ0Q1dgJ8+Nl1N+DLyDzWvLo\
FTNbmNJeo+j3VM5I0xXpWeETMtRGcYysogZILprICezZM5CfC7awAh36xJD35v6m\
XkwWkAq2QShQDApMJyoFJI2x9DeDoRIwgMh5pWSaNsfFRJqGaNhWHPZNILkc/PfE\
eI3JZEjYO7+Bpdgo7VD5jbbPv7R1xtwko1IClhgPA3jizuQJQnaJL9G6T+MjStXG\
5mdfnz2oTKBOIFMzblHSlqOYDnhP7Jbh0x0xE5dPaQQ0fsMxJqWEkDNIcfhWv8Bk\
fQIDAQAB\
-----END PUBLIC KEY-----";
You will note the \ at the end of each line.  Since the key is so long you will most likely want to use a line break so you can have it on multiple lines.  I recommend not having any white space before or after the \.
Lest anyone worry about having the public key in the actual code, remember that it is the public key.  People are supposed to know it. You could theoretically have the server generate a new public key with each request and embed it in the JavaScript for you, but in my opinion there is very little reason to do so unless you are super hyper paranoid or are protecting something more exciting than a user's blog.  You can check out the PHP OpenSSL documentation if you would like to pursue something more in depth.

Next, we load the key into the library with:
var key = RSA.getPublicKey(pem);
Now things are ready to go.  The actual code to encrypt something is :
encryptedText=RSA.encrypt(stringToBeEncrypted, key);
 How you choose to go about implementing that is up to you since there are quite a few usable ways, but here is a simple example:


<SCRIPT>
function encryptData(){
element=document.getElementById('encryptMe');
element.value=RSA.encrypt(element.value, key);
}
</SCRIPT>
<FORM ACTION='decrypt.php' METHOD='POST' id='txtAuth' onsubmit='encryptData()'>";
<INPUT type='text' name='encryptMe' id='encryptMe'></INPUT>
<input name='txtSubmit' type='submit' id='txtSubmit' value='Submit'>"; </FORM>";

I hope that this will save someone some trouble! Here is Part 3!




Encrypting Transmissions between JavaScript and PHP Part 1: Creating a useful OpenSSL RSA private/public key pair

I am working on configuring my web pages to encrypt a user's password when they log in to a web page.  At the moment I do not have the luxury of using HTTPS so I am focusing on using JavaScript to encrypt just the password using a RSA public key and decrypting it on the server side in PHP using the private key.

I had a hard time finding instructions for creating OpenSSL private/public key pairs that covered everything all in one place so I figured I would document what I have learned so I don't have to search for it again in 4 years the next time I need to do it.

Assuming you already have the latest version of OpenSSL installed, run the following commands from the command line.  I am using 2048 bit keys, if you wish you may substitute a different number in the instructions below. Also, I am not encrypting the keys.  For my purposes it is pointless as the password would be stored with the key.

1.  openssl genrsa -out privateKey.pem -f4 2048

  • This creates the initial private key.  the -f4 option signifies that the public exponent should be 10001
2. openssl rsa -in privateKey.pem -out publicKey.pem -pubout

  • This derives a public key from our private key
3. openssl rsa -in privateKey.pem -out publicKey.modulus -modulus -noout

  • This derives the modulus from the private key

4. openssl req -new -x509 -key privateKey.pem -out privateKey.x509 -days 1095

  • x509 self signed certificate
5. openssl req -new -key privateKey.pem -out privateKey.csr

  • normal certificate request for if you need to get an official certificate


As a quick refresher, you use the private key for the following:

  • decrypt content encrypted with your public key
  • sign (encrypt) content to be verified with your public key
You use the public key for the following:

  • encrypt content to be decrypted by the private key
  • verify content signed by the private key
For my purposes, I will be using the public key to encrypt content sent from a user's web browser via javascript, and using the public key to decrypt it on the server side via PHP. Check out Part 2 Next!

Wednesday, January 18, 2012

window.getSelection()

This post will focus on test cases for the javascript (well, DOM) function window.getSelection().

Test case:  <DIV id="edit" contenteditable>One Two Three Four</DIV>
1.

  1.  Select "Two".  
    1. window.getSelection().anchorNode.nodeValue="One Two Three Four"
    2. window.getSelection().baseNode.nodeValue="One Two Three Four"
    3. window.getSelection().extentNode.nodeValue="One Two Three Four"
    4. window.getSelection().focusNode.nodeValue="One Two Three Four"
    5. window.getSelection().anchorOffset=4
    6. window.getSelection().baseOffset=4
    7. window.getSelection().extentOffset=7
    8. window.getSelection().focusOffset=7
  2. With "Two" Selected, run document.execCommand('bold').
    1. window.getSelection().anchorNode.nodeValue="Two"
    2. window.getSelection().baseNode.nodeValue="One "
    3. window.getSelection().extentNode.nodeValue="Two"
    4. window.getSelection().focusNode.nodeValue="Two"
    5. window.getSelection().anchorOffset=0
    6. window.getSelection().baseOffset=4
    7. window.getSelection().extentOffset=3
    8. window.getSelection().focusOffset=3
  3. Select "Three".
    1. window.getSelection().anchorNode.nodeValue=" Three Four"
    2. window.getSelection().baseNode.nodeValue=" Three Four"
    3. window.getSelection().extentNode.nodeValue=" Three Four"
    4. window.getSelection().focusNode.nodeValue=" Three Four"
    5. window.getSelection().anchorOffset=1
    6. window.getSelection().baseOffset=1
    7. window.getSelection().extentOffset=6
    8. window.getSelection().focusOffset=6
  4. Select "Four" and run document.execCommand('bold').
    1. window.getSelection().anchorNode.nodeValue="Four"
    2. window.getSelection().baseNode.nodeValue=" Three "
    3. window.getSelection().extentNode.nodeValue=" Four "
    4. window.getSelection().focusNode.nodeValue=" Four "
    5. window.getSelection().anchorOffset=0
    6. window.getSelection().baseOffset=7
    7. window.getSelection().extentOffset=4
    8. window.getSelection().focusOffset=4
  5. Position cursor immediately after "Four" and press enter. Then Select "Four"
    1. window.getSelection().anchorNode.nodeValue="Four"
    2. window.getSelection().baseNode.nodeValue=" Three "
    3. window.getSelection().extentNode.nodeValue=" Four "
    4. window.getSelection().focusNode.nodeValue=" Four "
    5. window.getSelection().anchorOffset=0
    6. window.getSelection().baseOffset=7
    7. window.getSelection().extentOffset=4
    8. window.getSelection().focusOffset=4


Javascript execCommand()

I am writing a program (don't want to say what yet) that is largely reinventing many wheels in the programming world.  I know I am making my life harder than it needs to be, but I am gaining the following:

1. I am learning way more than I would have other wise.
2. I know exactly how every part of my program works, and why it works the way it does.
3. I don't have to pay anyone for anything.
4. I avoid situations like what I encountered tonight.

One of the components of my program is a rich text editor.  I did my research, and basically gave up to download a pre-built editor.  I started in on implementing it, when I discovered the cost to use it was going to be $300ish a year.  Given the budgetary concerns listed in point 3 I went back to the idea of doing it myself.  What I discovered is that all the tutorials I could find were making things way harder than they needed to be.  I started over from scratch and very quickly made a working prototype.  Is it perfect? No.  Do I still need to work through a lot of issues I wouldn't have had to otherwise? Yes.  Would I still be sitting in a corner crying if I hadn't? Yes.

Of interesting note is the fact that one of the top results for execCommand returned a javascript reference for IE 4.

Anyway,  here is some useful reference I've compiled for execCommand() in javascript that doesn't seem to be put in one place in a simple manor anywhere else.  Hope it saves someone the hours it would have saved me.  These are all valid for Chrome 16.  Your mileage will vary with other browsers.

The phrase "current selection" can refer to any length of selection, even 0.  In other words it can also mean current cursor (caret) position.

All references below assume the use of a <DIV> tag with contenteditable set such as:
<DIV id="imeditable" contenteditable></DIV>

All references below to using the default UI need to be updated as they don't work in Chrome. Bah.

The method itself:

execCommand(String aCommandName, Boolean aShowDefaultUI, String aValueArgument)

-returns true on success, false on failure

Commands:

BackColor - Sets the background color of the current selection.

document.execCommand('BackColor', false, '#333333')

Bold - Toggles the current selection between bold and non-bold OR Toggles bold/non-bold for future typing at cursor position.  *note: depending on implementation, the former case will continue in bold for future typing if it is not toggled off, or if the cursor is placed back on a bold section or immediately adjacent.

document.execCommand('Bold')

CreateLink - Inserts a hyperlink on the current selection, or displays a dialog box enabling the user to specify a URL to insert as a hyperlink on the current selection.

document.execCommand('CreateLink', false, 'http://www.example.com')


document.execCommand('CreateLink', true)     //displays user dialog

Delete - Deletes current selection.

document.execCommand('Delete')

FontName - Sets the font family for the current selection OR future typing

document.execCommand('FontName',false,'font name')

FontSize - Sets the font size for the current selection OR future typing

document.execCommand('FontSize',false,'font size')

ForeColor - Sets the foreground (i.e. font) color of the current selection

document.execCommand('ForeColor',false,'#333333')

FormatBlock - Sets the current block format tag. Possible Values: "address", "div", "h1", "h2", "h3", "h4", "h5", "h6", "listing", "p", "pre", "xmp","li", "dt", "dd", "p"

document.execCommand('FormatBlock',false,'pre')

Indent - Increases the indent of the selected text by one indent increment

document.execCommand('Indent')

InsertHorizontalRule - Inserts a Horizontal Rule

document.execCommand('insertHorizontalRule','id for new hr')

InsertImage - Inserts an Image

document.execCommand('InsertImage',true)


document.execCommand('InsertImage',false,'path/filename/image')

InsertOrderedList - Toggles the text selection between an ordered list and a normal block

document.execCommand('InsertOrderedList',false,'id for new ol')

InsertParagraph - Inserts a paragraph break

document.execCommand('InsertParagraph',false,'id for new p')


InsertUnorderedList - Toggles the text selection between an unordered list and a normal block

document.execCommand('InsertUnorderedList',false,'id for new ul')


Italic - Toggles the current selection between italic and non-italic

document.execCommand('Italic')

JustifyCenter - Aligns the current selection to the center

document.execCommand('JustifyCenter')


JustifyFull - Aligns the current selection to be fully justified

document.execCommand('JustifyFull')

JustifyNone - Aligns the current selection to the nothing

document.execCommand('JustifyNone')

JustifyLeft - Aligns the current selection to the left

document.execCommand('JustifyLeft')

JustifyRight - Aligns the current selection to the center

document.execCommand('JustifyRight')

Outdent - Decreases the indentation of the current selection by one indentation increment (i.e. the opposite of indent)

document.execCommand('Outdent')

Print - Opens the print dialog

document.execCommand('Print', true)

Redo - Steps forward one step in the undo history

document.execCommand('Redo')

RemoveFormat - Removes the formatting tags from the current selection

document.execCommand('RemoveFormat')

SelectAll - Selects All

document.execCommand('SelectAll')

Strikethrough - Draws a line through the middle of the current selection

document.execCommand('StrikeThrough')

Subscript - Lowers the current selection to the subscript position

document.execCommand('Subscript')

Superscript - Raises the current selection to the superscript position

document.execCommand('Superscript')

Underline - Toggles the current selection between underlined and not underlined

document.execCommand('Underline')

Undo - Undo the previous action

document.execCommand('Undo')

Unlink - Removes any hyperlink from the current selection

document.execCommand('Unlink')

Unselect - Clears the current selection

document.execCommand('Unselect')



Useful Reference:
Rich-Text Editing in Mozilla
https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla

MSDN Command Identifiers
http://msdn.microsoft.com/en-us/library/ms533049(v=vs.85).aspx

WHATWG Dev guide for execCommand
http://developers.whatwg.org/dnd.html#execCommand

HTML Editing APIs
http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html


Welcome Back

I have been wanting to return to blogging for quite some time but have been putting it off as I am in the middle of writing some software that will include blogging capabilities.  However, today it occurred to me that it really is rather silly to not use this blog for at least some of my content given the level of integration with Picasa and G+ that it has.  So here I am.  Hopefully this won't be the only post on here for the next year!

Thursday, January 04, 2007

Eat Alphabet Soup

Thoughts from vacation:

I love My Chemical Romance and +44. Thanks Deb!
I'm just a man,
I'm not a hero
Just a boy
I have to take a break every now and then and remind my self that I am not a failure.

Driving to Phoenix from Visalia isn't that bad if you stop in LA for three days on the way.
Spending 5 hours at Borders and Barnes and Noble the week before your Birthday when everything on your gift list is from those two stores is pure torture.
Claim Jumper makes the best free food.
Uninstalling a domain controller without first removing the computer accounts from it can mess things up.
Carting a 42 inch TV 1600 miles is worth it.
Sam and Melissa have the best cozy apartment.
I miss Swimming.
I had one of the best Birthdays ever.
My plan worked... I ended up with only Border's gift certificates; none to barnes and noble.
I got tons of awesome presents.

Thank you every body who put us up and took the time out of their busy schedules to spend time with us.
Mom and Dad
Rob and Candace
Gma and Gpa
John and Linda
Mary and Tim
Dan and Jennifer
Mike
Kevin White
Jen and Todd
Sharon
Sam and Melissa (special thanks to them for sacraficing their living room to us for 5 days!)

Love you all!



Wednesday, December 20, 2006

I did it

Well, I transfered over to the new non-beta version of blogger today (since today is the official non-beta version release day). So far I can't really see any reason to have done so other than I can log in with my gmail account instead of my blogger account. Oh, and there are labels at the end of my posts now.
The one major feature that could be useful I have no use for: the ability to restrict access to select readers. In other news, Jen should be dancing a happy dance about now.

Edit: Because I have a custom blog layout I don't have a place to view all labels. Oh well. Guess it is time to make a new template.

Thursday, December 07, 2006

Life and stuff

Life has been crazy. I've been working a ton trying to get a new web server up and going. I spent 3 or 4 weeks trying to get it going. you can see it at www.fresnounified.org.

We are doing Christmas in LA and New years in Phoenix. Should be exciting. I need to decide what I want to do for my birthday.

Oh, and I have finals next week. I'll be studying all weekend (aside from picking up something in bakersfield from Deb's parents).

Wednesday, November 22, 2006

$200

God is good! It turns out that we are only going to have to pay $200 for the $3000 worth of car repairs we have! The car is getting a brand new transmission and a brand new radio, both with a new 3 year warrenty. They gave us a good-will warrenty because the transmission really shouldn't go out after only 3.5 years. So we just have to pay a deductable of $200.

Yay!

Monday, November 20, 2006

Yes I like books

http://www.jakemandell.com/tonedeaf/
Check that out. It is a tool for tone-deafness. I just scored 63% after a long day of work when I wasn't really paying attention. I am going to take it again tomorrow when I am a little less tired.

Friday, November 17, 2006

Christmas and Birthday List

BOOKS:

Halo 2 Novel

Halo 1 Triolgy

Halo 2 Graphic Novel (low on my list)

TOYS:
xbox 360 wireless headset

xbox 360 Halo faceplate

xbox 360 HD-DVD player

Gears of War (Game)


Dish HD-DVR

DVD Collections:
Futurama Vol. 3

Futurama Vol. 4

Family Guy Volume 4

RING:
Low Dome TrewTungsten™ Inlaid with Platinum

More BOOKS:
(in order of preference, with complete cycles being prefered)

Artifacts Cycle

1. The Brothers War by Jeff Grubb (1998, ISBN 0-7869-1170-0)
2. Planeswalker by Lynn Abbey (1998, ISBN 0-7869-1182-4)
3. Time Streams by J Robert King (1999, ISBN 0-7869-1344-4)
4. Bloodlines by Loren L Coleman (1999, ISBN 0-7869-1380-0)

Ice Age

1. The Gathering Dark' by Jeff Grubb (1999, ISBN 0-7869-1357-6)
2. Eternal Ice by Jeff Grubb (2000, ISBN 0-7869-1562-5)
3. The Shattered Alliance by Jeff Grubb (2000, ISBN 0-7869-1403-3)

Invasion

1. Invasion by J Robert King (2000, ISBN 0-7869-1438-6)
2. Planeshift by J Robert King (2001, ISBN 0-7869-1802-0)
3. Apocalypse by J Robert King (2001, ISBN 0-7869-1880-2)

Novels

1. Arena by William R. Forstchen (1994, ISBN 0-06-105424-0)
2. Whispering Woods by Clayton Emery (1995, ISBN 0-06-105418-6)
3. Shattered Chains by Clayton Emery (1995, ISBN 0-06-105419-4)
4. The Cursed Land by Teri McLaren (1995, ISBN 0-06-105016-4)
5. The Prodigal Sorcerer by Mark C Sumner (1995, ISBN 0-06-105476-3)
6. Final Sacrifice by Clayton Emery (1995, ISBN 0-7522-0217-0)
7. Ashes of the Sun by Hanovi Braddock (1996, ISBN 0-06-105649-9)
8. Song of Time by Teri McLaren (199, ISBN 0-06-105622-7)
9. And Peace Shall Sleep by Sonia Orin Lyris (1996, ISBN 0-06-105619-7)
10. Dark Legacy by Robert E Vardeman (1996, ISBN 0-06-105697-9)
11. The Thran by J Robert King (1999, ISBN 0-7869-1600-1)

Legends Cycle

1. Johan by Clayton Emery (2001, ISBN 0-7869-1803-9)
2. Jedit by Clayton Emery (2001, ISBN 0-7869-1907-8)
3. Hazezon by Clayton Emery (2002, ISBN 0-7869-2792-5)

Legends Cycle 2

1. Assassin's Blade by Scott McGough (2002, ISBN 0-7869-2830-1)
2. Emperor's Fist by Scott McGough (2003, ISBN 0-7869-2935-9)
3. Champion's Trial by Scott McGough (2003, ISBN 0-7869-3015-2)

Masquerade

1. Mercadian Masques by Francis Lebaron (1999, ISBN 0-7869-1188-3)
2. Nemesis by Paul B. Thompson (2000, ISBN 0-7869-1188-3)
3. Prophecy by Vance Moore (2000, ISBN 0-7869-1570-6)

Mirrodin Cycle

1. The Moons of Mirrodin by Will McDermott (2003, ISBN 0-7869-2995-2)
2. The Darksteel Eye by Jess Lebow (2004, ISBN 0-7869-3140-X)
3. The Fifth Dawn by Cory Herndon (2004, ISBN 0-7869-3205-8)

Odyssey Cycle

1. Odyssey by Vance Moore (2001, ISBN 0-7869-1900-0)
2. Chainer's Torment by Scott McGough (2002, ISBN 0-7869-2696-1)
3. Judgment by Will McDermott (2002, ISBN 0-7869-2743-7)

Onslaught Cycle

1. Onslaught by J Robert King (2002, ISBN 0-7869-2801-8)
2. Legions by J Robert King (2003, ISBN 0-7869-2914-6)
3. Scourge by J Robert King (2003, ISBN 0-7869-2956-1)

Ravnica Cycle

1. Ravnica by Cory J. Herndon (2005, ISBN 0-7869-3792-0)
2. Guildpact by Cory J. Herndon (2006, ISBN 0-7869-3989-3)
3. Dissension by Cory J. Herndon (2006, ISBN 0-7869-4001-8)

Anthologies

1. Tapestries by Kathy Ice (1995, ISBN 0-06-105308-2)
2. Distant Planes by Kathy Ice (1995, ISBN 0-06-105765-7)
3. Rath and Storm by Peter Archer (1998, ISBN 0-7869-1175-1)
4. The Colors of Magic by Jess Lebow (1999, ISBN 0-7869-1323-1)
5. Myths of Magic by Jess Lebow (2000, ISBN 0-7869-1529-3)
6. Dragons of Magic by J. Robert King (2001, ISBN 0-7869-1872-1)
7. The Sectrets of Magic by J. Robert King (2002, ISBN 0-7869-2710-0)
8. Monsters of Magic by J. Robert King (2003, ISBN 0-7869-2983-9)

Kamigawa

1. Outlaw: Champions of Kamigawa by Scott McGough (2004, ISBN 0-7869-3357-7)
2. Heretic: Betrayers of Kamigawa by Scott McGough (2005, ISBN 0-7869-3575-8)
3. Guardian: Saviors of Kamigawa by Scott McGough (2005, ISBN 0-7869-3786-6)

Tuesday, October 24, 2006

From the department of DUH!

http://arstechnica.com/journals/science.ars/2006/10/23/5712


Who knew that saying that some groups of people can't perform as well as others would cause them to doubt themselves.

Tuesday, October 17, 2006

Since I know you all wanted to know what the words are....

itsumo kuchi kara demakase bakkari shabetteru
IESU, NO- dochira demo nai koto mo aru deshou
itsu datte sekai ha watashi wo tanoshiku sasete
itsuka ugokanaku naru toki made asonde ne
shakushaku yoyuu de kurashitai yakusoku datte mamoritai
dareka wo aisu koto nante hontou ha totemo kantan da
zuibun tooku made nagare nagarete setsunai'n desu
taisetsu na omoidesae wasurete ikisou desu
tashika na kimi ni aitai hyakunensaki mo soba ni itai
donna ni hanarebanare demo futari wo tsunagu jumon ha J-O-Y
kashi no ki ga yureru hi ha, sugu ni omoidashite ne. watashi wo.
itsumo kuchi kara demakase bakkari shabetteru
unmei ha hitsuzen ja naku guuzen de dekiteru
itsu made tattemo wakannai yakusoku datte yaburitai
dareka wo aisu koto nante tokidoki totemo konnan da
tashika na kimi ni aitai hyakunensaki mo soba ni itai
donna ni hanarebanare demo futari wo tsunagu jumon ha J-O-Y
shinu made DOKIDOKI shitai wa
shinu made WAKUWAKU shitai wa












Haha just kidding, here you go:

We're always just saying nonsense
Yes or no, sometimes it's neither
Anytime the world makes me comfortable
Play until the day you can't move anymore
I want to live with composure to spare, I want to keep my promises
To love someone is really quite simple
Flow, flowing away to a rather far distance hurts
It seems like I'm only going to forget my precious memories
I definitely want to see you, I want to be by your side one hundred years from now
No matter how far apart we are, the spell that joins us is JOY
When the oak trees sway, remember me right away
We're always just saying nonsense
Fate happens out of coincidence, not necessity
I'll never get it, I want to break my promises
To love someone is sometimes rather hard
I definitely want to see you, I want to be by your side one hundred years from now
No matter how far apart we are, the spell that joins us is JOY
I want to be giddy until I die
I want to be excited until I die

Yuki - Joy

Since Melissa was posting about bad music videos, I thought I'd post a good one for her.

I've seriously watched this 4 times already this morning. I just can't move my eyes away.

http://www.transbuddha.com/mediaHolder.php?id=1201

Tuesday, September 26, 2006

So little time, so much to do

Greetings from the depths of exhaustion
Things have been good with me overall, but I have been feeling very drained for reasons that I cannot figure out. It is mostly emotional. What is so exciting in my life that would cause me to be emotionally burned out? I really feel as if I am missing something, and I can't figure out what it is. Spiritual warfare maybe? I'd really been working on regaining the emotional part of my relationship with God (having spent too much time focusing on the intellectual), so I guess it wouldn't suprise me if that were where I was getting attacked.

We went to Portland last weekend for Mia's wedding. It was fun to see people.
This next weekend we have two parties.
Weekend after that we have Mia's reception.
Weekend after that we have who knows what (please be open)
Weekend after that we have Christina's wedding.
Weekend after that we are free (FREE!!!!)
Weekend after that we will be in AZ for GS's wedding
All the weekends after that till the end of the semester I will be working on getting my thesis finished and preparing for finals.

Sigh

We are thinking about renting an apartment in Fresno with our renter money. Just a small place. It would be nice for the nights we don't need to be in Visalia (Monday, Wednesday, Friday) just so we wouldn't loose those two hours of driving. We will have to see though. I'd have to change around my workout schedule a bit if I wanted to have those nights free which would probably mean giving up tennis.

In case I forgot to mention; my thesis proposal was approved, and I am on to the research part of the process. Still looking forward to the work, just worried about how I am going to find the time.

My class (advanced network security) is actually directly applicable to the work I am doing for my job, so that is kind of nice.

To everyone I haven't had time (or been able) to spend time with/talk to, I miss you.

Friday, September 15, 2006

TGIF

No, Seriously, TGIF.

It has been a weird week. I've been stressed, but I haven't really had any obvious reason to be stressed. I gave up caffine for the most part last week, so I think my body is still just getting used to the change. Deb and I are going camping at Pismo Beach this weekend, so maybe that will help me relax.

Starting next week I am going to be working a ton of overtime. So basically between work and school I will literally not have time for anything else. Except for Bible study and church of course. We will have to see if I will keep playing Tennis, and I will definitely still do my personal training sessions at the gym. So other than those things I will literally not have time for anything else. Oh, and I will spend time with Deb. So other than that and those other things I will literally not have time for anything else. Except Josh is coming to visit on Tuesday, so other than him coming and that, and those other things I will literally not have time for anything else.

Work is good for the moment. We finally just got a new Chief Technology Officer here, which should really help the work environment quite a bit.

School wise things are good. I've actually managed to stay on top of everything so far. I only have one class since I am working on my thesis. I just finished getting my proposal and commitee forms turned in, so I'm pretty much good to go on that front.

Toodles.

Wednesday, September 13, 2006

My computer is so fast...

It does an infinite loop in five seconds. Beat THAT!


(as seen on slashdot)