Friday, October 24, 2008

New Phone!!! - T-Mobile's G1

I am happy to say, after a year and a half of anticipation, I have just received my very own T-Mobile G1 running the Oh-so-awesome Android OS.

I have played with it for about 6 hours now, and I have to say that I am REALLY impressed! So many people are trying to compare the G1 with the iPhone... Ok, so the G1 is not quite as glamours as the iPhone... but what it lacks in sex apeal, it gains in openness!

So far, this phone has outperformed pretty much every other phone I have ever used (okay, that's not saying too much). It's equipped with a 528Mhz ARM processor by Quailcomm, 256MB of Rom, 192MB or Ram, a 3.2" touch-screen, Quad-band reciever, Bluetooth, 3.2 megapixle camera, WiFi, GPS, electronic compass, and so much more!

It's fully integrated with Google -- GMail, Calendar, Contacts, Maps, etc!

And already has a stockpile of very intregueing applications, many of which are completely free!


Monday, September 8, 2008

"Youth of today becoming the church of tomorrow" OR "Finding Identity"

I came across an interesting statement I thought I'd share... This is from a book called "Practicing Passion" by Kenda Dean:

"...many visible leaders of today's "alternative" congregations -- where pastors intentionally refashion styles of worship, patterns of polity, and forms of nurture to attract Baby Boomers and their progeny -- admit strong roots in youth ministry. A quick scan through their proliferating publications shows that, by and large, these leaders simply adapted their visions (and methods) of youth ministry to address the adults the youth inevitably became"

Just kind of blew me away, I think it's interesting, because it is so true... that people easily identify with the passions of their Youth. I remembered back when we had this Prime-timer's luncheon along with the youth/young adults... and they were reminiscing back to what it was like in their youth... standing around singing hymns and choruses until the wee hours of the night, praying for each other and seeking God all while praying with the Fire of the Holy Ghost... and that's exactly what gets them excited now. Just last Sunday, when we were singing a run of Hymns, all about Heaven... and those people really got excited... standing up, clapping, and singing with all of their heart. I just find it so interesting how things progress.

As a Kid, when I would go to youth events with my sister, and we'd sing songs like "I don't want to be a casual Christian"... and even today, the focus of that generation is all about not being casual with the things you do. Not specifically church or God, but life. To be committed to whatever it is you are doing... I think it because of the climate of that culture, where commitments just didn't matter.

With the youth of my generation, everything was about being extreme... X-treme sports, X-treme movies, X-treme songs.... pushing the limits and boundaries of everything. And that's exactly what we are still doing... pushing the limits of technology, laws, and even finances... And it is once again, a reaction to the climate of our culture. The generation just before us didn't commit, and my generation over committed to to many things, and does none of them well... okay maybe that's just a little critical... And that's how we view church... it seems to be an all or nothing deal... and if it's not, then we never really connect, we never really commit, because we are too busy over committing to too many other things...

What is really interesting, it the rising generation... Have you noticed the tone of even their music, especially the Christian music... everything lately has been to the tone of... I am lost, and I cannot make it another moment without you God. And forgive me for the terrible sin in my life. I am desperate for you God... desperate for something. I think, that this new generation is reacting to the climate of our culture. A culture where the young people are struggling to find identity, struggling to find hope, and struggling to find something to be passionate about, in a world that is falling apart at it's seems. A world full of Drugs, Sex, Crime, War, Terrorism, and overall Hopelessness.

Kenda said "'Identity'... and 'Identity formation' [is] the developmental 'crisis' that young people must resolve... a socially-sanctioned 'time-out' from adult roles and commitments in which young people could construct an integrated self that both responded to their historical context and cohered across time and social roles. This sense of self, or identity, WAS burrowed in part from social institutions and significant others whose established selfhood helped anchor young people's developing psyche... Yet... identity-bearing social institutions like families, schools, and religious communities grew noticeably weaker, and a new institution, the electronic Media started to make fragmentation look normal...Today, channel surfing, split screens, hyperlinks, and hundreds of other momentary investments seem to challenge [the] notion of an integrated identity...".

So where is this generation finding their notion of "Identity"? From the very culture that has stolen it... Today's youth has become radical and desperate. They are desperate to find their identity, desperate to find something, anything that they can love, and will love back. They are desperate to be part of something that they feel is worth dieing for. I am truly interested to see and understand what our young people require for a "successful" youth ministry... and more so, what the "successful" churches of tomorrow will become.

Here's the book info if you are interested:

Practicing Passion
Youth and the Quest for a Passionate Church
By Kenda Creasy Dean

Tuesday, September 2, 2008

There's a new sheriff in town...

Google has announced yesterday that it will be releasing a new web browser... Google Chrome...

What does this mean for the Web Browser industry? More competition... And from a Giant like Google, it's sure to be very interesting!

So what can a new browser do for us? well for the user, it means a cleaner interface with some feature and performance boosts.... for us developers, it means real sandboxing, true garbage collection, significant JavaScript performance boosts including compiled code before it runs, better security, and even the ability to run in a browser window that is stripped of all things "browser" allowing our "Browser Apps" to feel more like "Apps" and less like "browser".

I gladly welcome this new arrival and look forward to the innovation that Google will bring to the market!

Here's a link to their blog post:

Thursday, July 24, 2008

IE 7 Bugs are at it again!

Today's fun is with Unordered Lists. The basic structure is like this:
  • something
  • something else
  • another something
The styles that go with it are pretty simple too:


So why does it have to be so hard for Internet Explorer to render these little buggers correctly? If you can answer that question, Fly to Seattle and let MS know... maybe they'll make you a millionaire...

Okay... enough of the bashing and onto the issue at hand.

1. IE does not correctly handle margin/padding with image bullets... lets say you want there to be a 10px top margin so that your bullets are not stacked right on top of each other, FireFox does just fine... IE moves the text but forgets to line up the bullet... the solution? Take your bullet image and add some transparent canvas to the top... luckily, FF will still line the image up for you.

2. IE does not like if you specify a height on an LI where you are using "list-style-position:inside;". For whatever untold reason, IE decides to make it "list-style-position:outside;" instead. This is clearly a bug. FF also handles this correctly... the solution? either add padding-bottom to the LI or margin-top to an element inside the LI.

3. If you set the UL & LI to "padding:0;" and "margin:0;" and set "list-style-position:inside;" with a nested LI that is set to "list-style-position:none", IE does not correctly align the first line within the nested LI.

The first line within the nested LI gets indented to the same position it's parent LI, while every subsequent line is flush to the left. Again, clearly a bug... Again, FireFox handles this fine making both lines flush left. The solution? Add a break tag before the text... the downside is, this leaves vertical space between "item:" and your first line of text in BOTH browsers. Another solution is to use an empty div tag with it's height set to 0. This will fix indention problem in IE, still giving a horizontal space (because of a separate but related bug that causes the div to live below the indented first line) but still allowing FF to render correctly. Man what a pain! Thankfully, I was able to "overcome" this issue by making the background image of the header for the bulleted LI taller and just using a the blank div tag fix... This unfortunately won't work for everyone...

I know there were a couple others I had to deal with, but I am way too tired after spending the last 5 hours trying to make this work...

So you ask yourself why even use these pesky unordered lists if IE is so incompatible? I am asking myself that right now... HA! No, but really, the reasons are two fold. First, it gives the content semantically correct placement on the page, which is important for things like search engines and screen readers. Secondly, it is to create an accordion style menu that can expand and collapse showing additional navigational options.

I keep hoping and praying that one day, Microsoft will figure out how much pain and suffering they have been putting web developers though and start working as a standards compliant browser. There's always hope for IE8... of course that's what everyone was saying about IE7...

Friday, June 20, 2008

IE and another JS blunder...

So I report with great disdain, yet another problem with IE and cross browser compatibility. IE does not (by design) support the .innerHTML property correctly for elements like TABLE, THEAD, TFOOT, TR, and TBODY (even though it's not listed there). They decided for some unknown reason to be different on this topic than EVERY OTHER browser on the market.

Now, I will say, as a matter of practice, I resist the use of innerHTML as much as possible, using the DOM's document.createElement instead. I have, however, run into a case where this is not only impractical, it is not possible due to the very dynamic nature of the project I am working on.

So I built my project using FireFox (as usual) then crossed my fingers and launched it in IE to test compatibility. I was greeted with an ever-so-informative "Unknown runtime error". Even running they handy script debugger didn't give me any more information as to why .innerHTML would cause this sort of thing.

After much searching and much testing, I was forced to just destroy the table and use innerHTML on the parent DIV to recreate it.

What a pane... it's no wonder my boss made the early decision to only support FireFox for the administrative side of our software... too bad we can't do the same with the public side .

Tuesday, June 17, 2008

Firefox 3 launched today!

I welcome with open arms the arrival of FireFox 3. It's pretty, it's quick, and it successfully passes the Acid2 test!

So far, I have found only minor CSS corrections that need to be made for FF3 to work correctly on my many web sites.

I'll report more on my findings as I have more time to work with the newest version of FireFox.

Tuesday, June 10, 2008

The glorious "Adjacent Sibling Selectors"

Ahh, how I love CSS... It truly makes life wonderful! Today I found what I consider to be one of the more elegant of CSS selectors... the "Adjacent Sibling Selectors".

Basically, using the syntax: "E1 + E2{ }", tells the browser to match for the element E1 and E2 within the same parent, directly following each other. It then only applies that style to E2.

For example:

b + i {font-weight:bold;}
<span>The <b>Quick</b> <i>Brown</i> <i>Fox</i>

Would render like:
The Quick Brown Fox

instead of:
The Quick Brown Fox

Notice how "Brown" is bold and italicized and "Fox" is only italicized... this is because "Brown" is the child to <i> that is a direct sibling of Quick's <b> while "Fox" is a child to <i> which is a direct sibling to Brown's <i>.

Why would you ever want to do this? Anytime you want an element to act differently only when preceded by a specific element.

For instance, if you have a H1 (Header 1) followed by an H2 (header 2), you might want the H2 to be vertically closer to the H1 than it would be anywhere else on the page. You can accomplish this by simply adding H1 + H2 {margin-top: -5px} to the style sheet.

For more information, check out the W3 specification.

Tuesday, May 27, 2008

Stop begging and start obeying!

Have you ever felt like all you do with God is ask?

God, bless my marriage, bless my children, bless my job. Bless my pastor, bless my finances, and most of all, bless my food.

I think we so often loose focus on what God really wants. The Lord does say “Ask and you shall receive”, but He is also a relational God. He desires to be close to his children.

Think of it this way. If mom says “Timmy it's time to clean your room now” and Timmy smiles and says “I love you Mom” and walks away, but doesn't clean his room. Later he says, “Mom, can I have a new toy car?”. Knowing Timmy did in fact not clean his room, what do you think mom's response will be?

“Sure my son, you have been a good boy, so here it is”… No way!

It's a no-brainer, isn't it? If she's a good mother, she will ask him something like, “Did you clean your room like I asked?”, followed by Timmy's (hopefully) honest response of “Ummm... Noooo...”, followed by mom saying something like “I'm sorry Timmy, I love you and want to give you a new toy car, but unless you obey me when I ask you to do something, I cannot give you your reward.”

So it makes sense when we look at it like that, but when we put it in the context of God it seems like nonsense!

God says, “Jacob, it's time to clean your heart now”, and I smile and say “I love you God” and walk away, but don’t clean my heart. Later I say, “God, can I have a new car?”. Knowing I did in fact not clean my heart, what do you think God’s response will be?

“Sure my son, you have been a good man, so here it is!”… No way!

If He is a good God, He will ask me something like, “Did you clean your heart like I asked?”, followed by my (hopefully) honest response of “Ummm… Noooo…”, followed by God saying something like “I’m sorry Jacob, I love you and want to give you a new car, but unless you obey me when I ask you to do something, I cannot give you your reward.”

What a sobering thought!!!

1 Kings 2:3 says:

“Keep the charge of the Lord your God, to walk in His ways, to keep His statutes, His commandments, His ordinances, and His testimonies, according to what is written in the Law of Moses, that you may succeed in all that you do and wherever you turn.”

Furthermore, John 14:15 says:

“If you love me, keep my commandments.”

Finally, 1 Samuel 15:22b says:

“To obey is better than sacrifice.”

The key to prosperity in life… I am not talking about financial prosperity, I am talking about full life prosperity… is obedience to our Father!

Be bold, and ask of the Father what you need, but before you do, make sure you have – and are striving to – obey what He has asked of you.

Monday, May 5, 2008

In the presence of God

What an incredible weekend, what an incredible God! Have you ever had an "Ahhh" moment? You know, the kind where there is something staring directly in your face but you don't even realize it's there?

For the past several months, there has been something stirring in my heart... "If you do your part, God will take care of the rest"... I know it's a Biblical truth, to my supprize I stumbled upon it about three weeks ago but didn't think to write it down...

Anyway, I have just been hearing it over and over in my spirit... to the point that I have been saying... "God, WHAT IS MY PART?!?" Tonight it hit me! James Montera, an evangelist out of Pueblo Colorado spoke at our church, and something he said hit me to the core...

He said, (and this is the Jacob paraphrase) "So often in the churches I see people running to God like selfish children, reaching into his pockets to find out what presents he has brought us next. There is no doubt that God has brought His children gifts of blessings, gifts of peace, gifts of joy... Really, His pockets are overflowing... Sadly, as often as he visits us ready to give us His gifts, He leaves with all those things still in His pockets. You see, as greedy Christians, instead of running to God, simply to be in His presence, we run to God to receive things from God. Like a father returning from business trips, bringing his children gifts... over time, those children, instead of saying 'Daddy, we missed you, we are so glad to see you', the begin to say 'Daddy, we missed you, where is our gift', and then just 'Daddy, where is our gift'. How sad is it that we ignore the giver and focus all of our attention on the gift!"... now this is where it got really good!...

He said "I have seen a lot of people seek after the 'things' of God, and leave unsatisfied... but I have never seen anyone seek after the 'presence' of God and not receive the 'things' of God along with it!"

And that's when it hit me!!! That's when I had my "Ahhh" moment... If I do my part, God will take care of the rest!!! So, what is my part??? To simply seek after the "Presence of God"!!! Forget the gifts, seek after the giver with everything that is in you, and the gifts will simply come!

Jen and I are pastoring the Children as well as the Youth and Young Adults! We need fresh ideas for the children, where will they come from? If we seek the presence of God, he will bring us fresh ideas and fresh vision like we have never seen before. We need to come up with gripping discussions and messages for the Youth and Young adults, where will they come from? If we seek the presence of God, His word will come alive to us, and we will NEVER run out of things to talk about! We need strength and patience to deal with these young people, where will that come from? If we seek the presence of God, His grace will abound in our lives.

I have so much more to say, but it's already 1:30 Monday morning and I have to go to bed. But, let me just leave you with this statement once again.. "I have seen countless people seek after the things of God and walk away empty handed... but I have never seen anyone seek after the presence of God and not receive the things of God"!

Wednesday, April 23, 2008

Get the querystring using JavaScript and Chaining

Okay, so this is going to be a very short pot... 'cause I don't have that much to say... except that everyday I use JavaScript, I like it more! Sure there are lots of drawbacks to it such as cross browser/os compatibility, and cross server insecurities... but you can do a lot to mitigate those issues, especially if you work with a good framework such as jQuery or YUI...

So what's the point of this whole post? Earlier today I created a js file that records metric information about website visitors... a pretty simple script... gather information such as screen resolution, user agent, color depth, ip address, session id, login id, etc and send it to a server side script to record the data.

So, one of the pieces I wanted to collect was the querystring. I wanted a clean one line solution to gathering that string.

I knew that window.location.href would give me the string version of the url currently in the browser so I thought I could split on the "?" resulting in "window.location.href.split('?')" Which in turn gave me an array containing 2 elements, the host string and the querystring... I am only interested in the query string... knowing that JS now treats the result as an array, I can grab the array element 1 (which is 2 in most programming languages...) like this: "window.location.href.split('?')[1]"... and there I have it!

Wednesday, April 16, 2008

Speed up your website

The creators at Yahoo have done it once again! What started as 13 rules became 14, the 23, and now 34 best practices for speeding up your website. This is a GREAT article and a MUST READ for any web developer. These 34 items are sorted into 7 categories. Some are pretty advanced and require changes in your server configuration, but many of them are simple changes in your practices that can have a profound change on the the speed of your website, or at least the perceived speed, which is just as important.

Wednesday, April 9, 2008

Google is once again pushing the limits...

Google has recently released in limited beta a SDK/App Engine/Framework called the Google App Engine, to which you can develop web based applications using the same infrastructure that software like GMail, Google Calendar, and the other Google Apps have been created on, and then host them on the Google servers... their SDK/API is pre-built to handle scaling and heavy traffic loads (up to 5M pageviews/mo with a free account) and increasing storage needs (500mb on free account)... also they give direct access to Google mail API, Google file storage, Google "Datastore" (their db system) and plan on taping into others like calendar... Also, you can use your own custom domain names to point to your apps... Finally, Google is allowing you to use their authentication system for authenticating your users! No more asking users to create yet another login for yet another web application!

Now I'm not saying this is better than hosting your own server, but it is pretty stink'en cool!

One downside is that it currently supports only Python... I might be learning a new programming language! =)

Friday, March 7, 2008

Wez gotz da hookupz

I am pretty excited about this... We have finally been able to order some new audio hardware for "The Block", our kid's church! Hurray!!!

We are getting hooked up with Sure's new PG1288/PG30/PG58 wireless microphone system. It comes with a PG58 Wireless Handheld, a PG30 Wireless Headset and a dual channel PG1288 wireless receiver!

A BIG thanks to my awesome big brother, Jeff Fogg in Pro Audio with Guitar Center Tucson, 520-358-7751... He hooked us up with a PHAT deal... With the whole order, he saved us almost $50 over the cheapest online competitor!

Now, the only thing left to do, is to hurry up and wait for UPS to deliver!

Wednesday, March 5, 2008

Upper limits of the query string...

So I ran into a problem recently where information was not correctly being passed from one remote page to another... It took quite a bit of digging to finally find the root of this issue. It turns out, that in addition to having to deal with issues with cross-browser compatibility regarding JavaScript, we also have to deal with it regarding the querystring!

Now I know what you are thinking... who in their right mind passes so much information in the querystring that it would reach the upper limits??? I agree with you, but it is currently out of my hands.

Building "widgets" and "plugins" for commercial sites that expect to be able to "remote authenticate" can be quite tricky... especially if they are built on 4th party CMS's that decided to build their own proprietary server side scripting language (that remotely resembles classic asp)...

Okay, long story short, I am passing variables to the remote authenticator via POST variables... that software is then authenticating the users and moving all of those POST variables to the querystring as GET variables to return the user back to the clients CMS where we then process their data... I know, I know, it's an incredibly complex mess, but until the CMS is able to provide us with methods to read and write cookies, we are stuck with it.

So, it turns out that although this specific case works fine with FireFox and even Safari, it breaks in Internet Explorer (what a surprise =). Because of this I did some testing... and here are the results:

Browser version querystring upper limit
FireFox 8182
Safari 2.0 8184
IE 7.0 2047

Monday, February 4, 2008

YUI and Bookmarklets

I am a big fan of YUI (Yahoo User Interface) as it truly simplifies the cross browser implementation of JavaScript. In some ways it can be bulky, in some ways it's easier to implement my own light-weight controls... In other ways it has revolutionized the way I program JavaScript. Recently I came across one man's idea of implementing YUI everywhere you go. The idea is simple, add a simple script as a bookmarklet and you can utilize the power of YUI on anyones website!
The code is simple:

var s = document.createElement('script');

Once the script is run you can run additional scripts like:
var all = document.getElementsByTagName('*');for(var i = 0; i < all.length; i++) {new YAHOO.util.DD(all[i])}

Which will make all elements dragable, allowing you to mess with web pages in some pretty unique ways!

It is stuff like this that really makes being a web designer exciting!

Friday, January 25, 2008

setTimeout / setInterval and object scope

I have found over time, the need for setTimeout/setInterval is pretty rare... however, when the need does arrive, it is an invaluable tool!

The problem that I have consistently run into as of late (now that I am writing primarily object based JavaScript) is that when you use these functions, you loose the scope of your object. (i.e. if you call setTimeout(this.myFunc,900); this no longer refers to your object, but rather window, causing your script to fail). In search of a solution, I found an interesting article by Kelvo.

Klevo points out that in FireFox, setTimeout allows you to pass an additional parameter stating the implied scope. So by simply changing our command to: setTimeout(function(that) { that.methodToCall(); }, time, this); fixes the issues with scope... We basic create a proxy function that accepts an object as it's only paramater and gives us access to of that functions methods! This is a beautiful solution, if all you are developing for is FireFox.

From there, I found Alex's article who gives a simple yet elegant workaround for IE as well.

Check it out, it's absolutely worth a read for anyone who has run into trouble with setTimeout and JavaScript objects.

Tuesday, January 15, 2008

What's in a dream?

So, last night I had this crazy, yet very vivid dream... My wife and I were having this party at our house... well, it was more like a mix between our house and Jen's parents house... anyway, at some point during the party this kid, couldn't have been older than 14, who I didn't recognize got really upset in one of the back rooms... Needless to say he pulled a gun and tried to shoot the people around him. Thankfully he only grazed the arm of one, the rest were able to get out of the way. As I went running into the room, the kid stepped into the bathroom and proceeded to shoot himself. When I stepped into the bathroom I remember my spirit crying out.. "Nooooo! God, you can't let this happen! If he dies now he will end up in Hell!"... I stepped closer to him, and he was indeed dead, no pulse, no breathing. All I could think to do was pray... "In the name of Jesus" I said as I laid my hands on this boy, and instantly he took a deep breath... I stepped back, almost scared... "What happened? I was dead... My body was being torn apart...", he said quickly and out of breath. "God didn't think you were ready to die, He brought you back to live... He has a purpose for your life...", I replied. The kid jumped to his feet, and I took a couple steps back... he ran towards me and wrapped his arms around my neck... "No one has ever told me I had purpose... no one has ever believed I could do anything" He said as tears were rolling down his face. He proceeded to run though the house hugging every freaked out person, telling them how God brought him back from the dead and how He has purpose for everyone...

That's about all I remember... At this moment tears are running down my face. I don't know why I had this dream... I don't know what it means... A friend of mine told me that maybe I am supposed to pray for this kid... I don't even know his name... So if you are out there Kid, I am here, praying that God will restore the life in you, that He will show you purpose, that He loves you despite everything you have done or been through.

"I can do all things through Him who strengthens me." -- Philippians 4:13 (NASB)

Wednesday, January 9, 2008

Sending out some props to Nick Hauenstein for his fantastic work on finally a site where you can not only read the Bible and find research material, but you can track your reading progress, write notes about every verse if you like, and share them with the world or just keep them all for yourself. This is the creme de la creme for online Bible studies with a group of people! Finally, God's Word meats social networking (well, sorta).

Tuesday, January 8, 2008

Safari for Windows????

How ridiculous I thought... Safari for windows? Who in their right mind would even consider that???? Most Mac users don't even like Safari!!! But, I figured as a matter of standards I better try it... cause I'm gonna have to start supporting it... Here's the thing... I actually think they have done an excellent job! This is not the Safari that I am used to... it's clean, responsive (maybe even more responsive than FireFox...), AND... it even passes the elusive Acid 2 test!... well, almost... Who knew!?! Now, it's only in beta for windows at this point, but even at that I am starting to like it... So far every site I have visited has seemed much more responsive and every site I have built and tuned for FireFox has worked without a hitch! The jury is still out on this one for me, but I am happy to welcome this new contender to the ever growing browser battle! (that statement may come back to bite me some day ....)