Saturday, November 28, 2009

Growing up in a superhero family

The IncrediblesHave you ever wondered what it would be like to discover you’re a superhero? What if your whole family were superheroes?

On Thursday I watched The Incredibles with friends to finish off a great Thanksgiving. I was intrigued by the way Helen and her kids (Violet and Dash) reacted to danger as a family.

(Helen, Violet  and Dash safely land in the ocean after escaping from their plane.)

Violet: What are we gonna do?

Dash: We're dead! We're dead!

Violet: It blew up!

Dash: We survived but we're dead!

Helen: Stop it! We are not gonna die! Now both of you will get a grip. Or so help me I will ground you for a month! Understand?

Dash: You want to go toward the people that tried to kill us?

Helen: If it means land, yes.

Violet: You expect us to swim there?

Helen: I expect you to trust me.

Helen knows who she is. She is Elastigirl and she confronts danger with confidence. Violet and Dash, on the other hand, panic.

Why do they freak out? I think it’s because they don’t know their true identities. They’re aware they have superpowers, but they’ve grown up hearing they should never use them and they should act “normal”.

Helen later tells the kids, “Your identity is your most valuable possession. Protect it.”

I think many who’ve been adopted as God’s children face a similar identity crisis to Violet and Dash. We’ve heard we can do all things through Christ. But we constantly feel pressure to fit in and rely on what we see. And when our faith is tested we tend to get anxious and allow doubt to creep in.

Violet is particularly doubtful and insecure. She’s been told all her life to forget about her powers. Then all of a sudden she is asked to use them in an emergency, but she fails. She must feel frustrated and confused.

Ever feel like that? I have.

But even after her failure her mom doesn’t doubt Violet’s identity. She lovingly forgives her and tells her to be true to herself (finally):

Helen: If anything goes wrong, use your powers… Vi, I’m counting on you. Be strong.

Violet: Mom! Mom, what happened on the plane. I'm… I'm sorry. I wanted to help. I mean, when you asked me to… sorry.

Helen: Shhh. It isn't your fault… But things are different now. And doubt is a luxury we can’t afford anymore, sweetie. You have more power than you realize. Don’t think. And don’t worry. If the time comes, you’ll know what to do. It’s in your blood.

I think God believes in us more than we do. And when we fail, He doesn’t love us any less. He lovingly encourages us to get back up and try again. We need to hear and believe what He says about us so we can have the confidence to walk in His will.

Superheroes are a bit like royalty, who… “already know who they are inside, which enables them to become selfless and give out more than they receive” (p. 77, The Supernatural Ways of Royalty by Kris Vallotton and Bill Johnson).

After Violet and Dash understand and experience their true identities as superheroes, they gain confidence, defeat bad guys and help save a city.

Who does God say you are? What can happen once you believe it?

Monday, July 20, 2009

Some things I’ve been learning lately

I’m using ASP.NET MVC in my current project at work and have been learning a lot in the process. I’ve read a lot of articles and watched some videos. I recently went through the NerdDinner Tutorial which was quite helpful and read most of Professional ASP.NET MVC 1.0. But there’s a lot more to writing a production app than can be learned from reading or even working through a tutorial – so it’s been a slow process, but I feel like I’m learning a lot.

The past few years I’ve been working mostly in classic ASP. I’ve done some C# on the side and a couple basic ASP.NET projects. There are a few reasons I chose to do this project on a new platform. I want to stop developing new features in an outdated platform. I want to make use of some functionality built-in to the .NET Framework. And I want to learn and use some better development practices.

Actually developing a real project in ASP.NET MVC has been a bit of a leap though. I feel like I’m biting off a big chunk. Here are some of the things I’ve been learning:

  • I’m trying to be test-driven (well, except for database access, file access and HTML output – but at least they’re isolated so the other parts are easier to test). It seems to be going better than my previous attempts.
  • I’ve been learning Rhino Mocks for mocking and stubbing.
  • I’m using an object-relational mapper (Fluent NHibernate) for the first time to hopefully reduce redundant database-access code. There’s still a fair amount of raw SQL, but the surrounding code is simpler. (I didn’t use LINQ to SQL because Visual Web Developer Express doesn’t support connecting to an external SQL server.)
  • I just added StructureMap for dependency injection (DI) so that my classes can be more loosely coupled. I started out with poor man’s DI, but just switched to rich man’s… er, using a container.
  • I’m trying to minimize the use of “magic strings” by making use of the strongly-typed HTML helpers in the MVC futures library. I also found the TestControllerBuilder from MVC Contrib helpful for testing HttpContext.
  • I feel like I’m learning OO better. Living in VBScript for so long didn’t help much. I’m also learning the MVC pattern and framework, ASP.NET, C# 3 and LINQ better. I’m currently working on a custom role provider to take advantage of roles from the existing app.
  • On that note, I’ve been realizing how much infrastructure is in the existing app that I took for granted that I will have to port, convert to a web service or use COM interop for.
  • I can sort of deploy it to IIS6 but it’s not one step. Still trying to figure out the best solution.

I was a little scared about all the different things I might have to learn for this project, and looking at this list I can see why. I didn’t absolutely have to learn all of this, but I like to do things “right” and I want to grow as a developer. I believe I’m past the hardest new challenges. I’ve got basic usable functionality. There’s still work to do, but hopefully that will progress more quickly.

There are still several things I would like to learn and do in the future, including:

  • Finish this project
  • Test-driven JavaScript
  • Acceptance/integration testing
  • Continuous integration
  • Scripting database setup and changes
  • Switch from Subversion to Git at work
  • Do all new development in a more modern platform than classic ASP and eventually convert most or all of the older code

That’s it for now. If you found any of it interesting then cool beans ;-). Feel free to comment if you’d like.

Friday, June 19, 2009

Notes from God Is Not Silent by Misty Edwards

IHOP Encountering God Service on June 12, 2009

Misty Edwards

Purchase the MP3

Psalm 19

God speaks through creation

  • it makes us ask questions

when God spoke to people they wrote it down

the Bible is God's heart revealed

Misty learned how to meditate on the word of God by fellowshipping with the Holy Spirit.
Book: Experiencing the Depths of Jesus by Madame Guyon
(Note: the original version was called A Short and Very Easy Method of Prayer and can be found for free)

Misty would sit down with her Bible and just read, talk to the Holy Spirit

  • she imagined the Holy Spirit was there as her teacher and ask Him questions
  • turned it into a dialogue
  • took each phrase, meditate on it, speak it to God, let God speak it to her

the Bible is the primary way to transformation

  • it is the only way our heart will be transformed

talk to Jesus through the language of the Word (Bible)

  • am I dialoging with the Lord through the Word (year after year)?

even when the Word is boring, it's still more exciting than the alternatives (how exciting is watching TV, really?)

she started to be transformed and changed
time with the Word of God with Jesus works

  • it takes time (years)

Psalm 19:7-11
the law of the Lord converts (restores) the soul

  • you come most alive because of the word
  • it makes us wise
  • it brings joy to the heart
  • it brings clarity
  • it's our lifeline
  • it sets us free

God expresses Himself:

  • in creation
  • in the Word
  • through us

One of the primary ways we will express God is through our tongue and lips

  • if David didn't have the meditation of the word he wouldn't have had the word on his lips

the word is like a chisel on our heart fashioning
His word is a light

  • it reveals stuff inside us (our heart is deceitful)
  • we have seeds of sin in our heart
our heart is the arena
  • God's word is His love letter
  • He's waiting for us to respond
  • like someone in love sharing their feelings and waiting for a response
all of life comes down to our heart response
all of life comes down to love
God is love
  • we were made in that image
  • we were made to give love, to receive love, to give love, to receive love
  • that exchange happens behind the face, at our heart level
God's asking are you going to respond? are you going to come into agreement?
you will become most fully alive when you express love
  • humility, meekness
  • love gives everything
  • you're gonna take up cross, deny yourself, deny your flesh, run after Me, forget your father's house, come away with Me
  • it's the voice of the Bridegroom
love is totally abandoned

David
v. 10 your word is to be desired more than gold
I want your word more than anything in life

v. 12 cleanse me from secret faults

  • that we don't even know about
  • healthy evaluation of our hearts

the arena, the war on the inside, this arena is where the word of God is most effectively worked out in our lives

  • we become the very embodiment, the very expression of God as we are transformed into his image by the power of His word
  • as we are transformed we become a testimony of who He is, become fully alive, fully who we are

v. 13 cleanse me from presumptuous sins

God values the words of our mouth

  • he is the Word
  • it's the greatest form of expression
  • complaining is a big issue in the body of Christ
  • it's one of the worst sins that shuts down our heart and the flow of the word
  • gossip is hurtful, coarse jesting is a waste
  • when we can learn to tame our tongue we can tame every part of us

v. 14 May the words of my mouth and the meditation of my heart be pleasing to You

  • what do we think about most?
  • desire to think about God all the time
  • it happens through the word of God

our brain is always thinking

  • when we fill our mind with the word of God we'll be transformed

“if you want to enter into the depths of My heart”

  • “I am not silent”
  • get worthless things away from your eyes
  • remove wax from ears
  • come to God through the power of God
  • "I am not silent. You are not listening, but I am not silent."
  • "I want to speak to you, to interact with you, to transform you, to make you fully fully alive, I want to excite you, to exhilarate you, to give you something to live for, something to die for, to give you faith, to help your unbelief, to show you that I'm real, I exist, ..."

"will you press your ear to My heart called the Word?"

  • the Word, the very transcript of My soul
  • actually read it, talk to Me, come to Me, talk to Me
  • you don't understand it? it's boring? ask Me to help you and keep on asking Me to help you
  • cry out for the knowledge of God and you will get the knowledge of God
  • ask Him, "I want to know You"

the Bible was boring for Misty

  • but God asked her to give her time
  • get the Word of God
  • put it on the schedule

"If you really want to know Me: it's the glory of God to hide a matter, the hungry (those with a kingly, noble heart) search it out."

  • the word is for you (it’s for everyone, not just preachers - it was written for peasants)

the Word is God's heart laid open ready for you if you want it

  • it's simple but so few do it
  • it's the first thing to be cut from the schedule
  • but it's the number one thing that sustains our life

from Madam Guyon's book:
take the word

  • don't just read a verse and move on
  • pray-read the word
  • turn it into dialog
  • if we don't come to Him, our heart's not gonna come as alive
  • focus on the Holy Spirit inside of us (He's the teacher, He knows Jesus, He knows the Word) or focus on the throne
  • personalize it, ask God for help
  • pray or sing in the Spirit
  • say it or sing it
  • journal it
  • put it in my own words
  • digest it
  • it will transform our life

Jesus talked about the word all the time
John 14:21 He who has My commandments and keeps them is he who loves Me, and he who loves Me will be loved by My Father and I will love him and manifest Myself to him.

  • it's not by casually or occasionally seeking God
  • to keep His commandments is to hold them in our heart and walk them out
  • then He will manifest Himself to us

it's so easy to get out of the habit of being in God's word

  • we need to do it every day
  • it's not a one-time badge

"I want you to come after Me"
"Will you sign up again?"

  • repent (once) for failing to be a man of the word
  • talk to the Lord
  • ask God to forgive us for accusing Him of being far away, for being hard to find, for being silent
  • ask Him to forgive us for our lack in the word
  • set our heart to be a man or woman of the word, not to take it for granted

His mercies are new every morning

  • you will come alive in His word
  • it's not a chain around your neck
  • you were made for a deep intimacy with the uncreated God
  • it's not too mysterious, it's not too far away, it's not too hard

the Lord says "My mercies are new every morning"

  • you can know Me, you can love Me
  • I knew what I was getting into when I called you
  • I am not shocked by your lack or your failure

Monday, May 18, 2009

Introducing ASPUnitRunner

Have code in classic ASP? Want to write unit tests for it? Want to make it easy to run those tests?

Here’s my solution: ASPUnitRunner. It’s a .NET library that enables running ASPUnit tests via NUnit.

The Story

(If you don’t care about the “why”, skip this section.) I’ve been trying to get more into automated testing and TDD. But most of our code is written in classic ASP. I started writing some tests using the ASPUnit unit-testing framework for classic ASP. It does it’s job, but I found there was a little friction running the tests. You have to open a web browser, navigate to the right location and click Run Tests. And, continuous integration frameworks don’t exactly have out-of-the-box support for ASPUnit.

There are multiple options available: create an application shortcut for Google Chrome, write a script that uses cURL or wget, or setup Selenium or Watir tests like @calvinb. Any of these may work for you, but none of them were quite what I wanted.

I also found a refreshingly new series of posts on unit-testing classic ASP by Justin Davies. (You should really check them out if you’re interested in unit-testing classic ASP.) I had had the idea in my head to automate ASPUnit tests with NUnit, but he had already done it (albeit with his own unit testing framework). His articles inspired me and gave me some ideas, but it wasn’t until now that I actually wrote my own.

So I wrote my own library to allow running tests for the existing ASPUnit framework from the popular and easy-to-use NUnit test runner.

An Overview

ASPUnitRunner consists of two main classes: Runner and Results.

Runner’s constructor takes a URI to your ASPUnit test runner and an optional credentials parameter. You then call the Run method with the name of the ASPUnit test container to execute, which returns a Results object.

The Results object has the following properties: Tests, Errors, Failures and Details. You can use NUnit assertions to verify that there are zero errors and zero failures and display details if there were any errors or failures.

The source is available at github. If you come up with any improvements, let me know and I may integrate them.

How to Use

Note: the following instructions assume you have existing, runnable ASPUnit tests and are familiar with Visual Studio and NUnit.

  1. Verify that you are able to run your existing ASPUnit tests from a web browser.
  2. Create a new NUnit test project in Visual Studio.
  3. Download the latest ASPUnitRunner binaries and extract them.
  4. Add a new reference from your Visual Studio project to point to the DLL you just extracted in the last step.
  5. Create an NUnit test fixture similar to this example (note that it makes use of the Values attribute new to NUnit 2.5).
    • Add a using AspUnitFramework statement
    • Initialize a new Runner object with the URI for your ASPUnit test runner and optional credentials
    • Run the tests for each desired ASPUnit test container
    • Assert that the results has no Errors and no Failures.
  6. Compile
  7. Run the new tests using your favorite NUnit test runner (or integrate them into your NUnit-compatible continuous integration server).

Limitations

Unfortunately the NUnit GUI does not format the HTML result details well. I would like to improve this in the future.

I make no guarantees that this library won’t open a black hole and suck up your computer and the rest of the universe, nor that it won’t cause any other type of damage or loss.

Unlimitations

ASPUnitRunner is not actually dependent on NUnit. It should be usable from any .NET test framework.

In Conclusion

Other than some scripts and snippets, this is my first publicly released project of my own. Sure, it’s really small and simple—but it’s something.

Thanks to the creators of ASPUnit and NUnit for creating helpful tools and Justin Davies for the inspiring example.

I would love to hear any suggestions or feedback you have. Let me know if you find this useful. If you have questions getting it to work I’ll try to help as I can, but no guarantees.

Sunday, May 10, 2009

Thoughts on development and life

I tend to be a perfectionist. I can easily get into analysis paralysis trying to figure out the ideal approach to a problem.

The idea of TDD appeals to me because it is supposed to enable rapid progress while proving the code does what it’s supposed to. You keep it simple and quick by doing the simplest thing to get it to pass the test. Once it passes the test you get to refactor to clean up the code and you know it still works if it passes all the tests. Then you write the next test.

Sounds lovely. Wish I was there. I’m not, but I’m trying to head that direction.

I’ve found that writing tests can be hard. Particularly dealing with GUIs, database access, legacy code and deadlines.

Most of our codebase is in classic ASP with few tests. I’ve written a few tests using ASPUnit, but running tests from a web browser isn’t my favorite. So I just wrote a .NET library that enables running ASPUnit tests from NUnit. (I’ll share details of that in a future post.)

I feel like I’ve learned so much over the past year. I also feel like there is so much more I still need to learn and so much room for improvement. I actually get pretty frustrated by my slow progress at times and how much I still have to learn.

I had a season where I spent a lot of time reading technical books and articles and programming and I’ve been attending user group meetings, but I let other areas of my life suffer. Then God readjusted my focus. As much as I love programming, it is not my source of joy. Jesus is.

So I’ve been adjusting my priorities and trying to put God first. But I still program at work. And I want to grow as a developer and become excellent in my craft. So now I’m trying to find the balance, where I keep God first and don’t neglect important things like sleep and friendships while still growing as a developer.

Anyways, those are my thoughts. It may or may not make sense to you, but if you have any feedback feel free to leave a comment. I think I’m gonna go hike for a bit now.

Tuesday, May 05, 2009

Navigating the Maze

I’ve been meaning to write this article for a while. Here’s the reason behind my blog’s title.

maze A maze

When I was a kid someone built a human labyrinth in my hometown. It was called The WOOZ (photo). While it got old after a few visits, I do have some fond memories of finding my way around the maze trying to get stamps from each of the four towers and reach the finish line in time to do the bonus challenge.

My life feels like a maze a lot of times. A much bigger, more complicated and more mysterious maze than the WOOZ ever was. But a maze nonetheless. And I’m in it. And I spend my life going through it.

I’ve even received a couple prophecies that refer to my life feeling like a maze or like finding my way along a narrow path.

Sometimes I try to figure this maze out on my own and I’ve wasted time getting really lost.

But it’s not a maze I can successfully navigate on my own. I can’t see very far and I don’t know where to turn. But I’m learning to wait on God and let Him lead me. Because He does know the way through this maze.

Sometimes, I get a glimpse of what’s ahead, like a tower in the WOOZ. But who knows if the next turn will lead to the tower entrance or if I will have to go through several more twists and turns to get to it. Some destinations I will never get to and others seem to come out of nowhere. That is a maze. That is life.

For example, working with computers was something I saw from far off. But going to UC Berkeley and moving to Nashville were two things that happened with little forewarning. There are other things I thought would’ve happened by now, but I’m still waiting.

There have been some tough roads. But there have also been some really amazing moments. Learning to trust God has rarely been easy. But to know that Jesus is walking with me, that He is leading me and realizing more and more how much He loves me makes this journey worth it.

Your word is a lamp to guide my feet and a light for my path. – Psalm 119:105