After Dark

Tags

, ,

I recently wrote about Creating with a Constraint, and I thought I’d take my own advice this last weekend. It was Sunday, and I was in Flint celebrating my nieces’ birthdays. Adriana was turning 5 in a few days, and Amelia is turning 8 in March. I asked both girls if they’d like a story for their birthday, and they did.

So, I gave myself some constraints. First, I asked them what the story should be about. You’ll have to wait for Amelia’s answer, but Adriana said that I should pick the story. I didn’t want to let myself off the hook so easily, so I asked her if it should be about fish, or dolphins, or princesses. She picked fish, because they recently got a pet fish. I asked her what the fish should do, and she said it should get out of its bowl. Ok, I can work with that.

Constraint 2: Time. I didn’t have much of it. Her birthday was Wednesday, and Sunday was just about over. Monday was full of errands and Tuesday was work and the Michigan State basketball game, so I’d have to find time for it.

And to up the level of difficulty even further, I added a third constraint and tried my hand at some poetry. I was thinking more Dr. Seuss than William Shakespeare, especially after I tried to understand iambic pentameter. After a bit of research, I settled on anapestic tetrameter. Sounds fancy, but you’ll know it if you have read Twas the Night Before Christmas.

So, without further adieu, here is After Dark.

In a house there once lived two young girls with a fish.
It was fed and was loved; for a pet was their wish.
So they named the fish Molly and they sat and then stared.
But dear Molly just swam and did nothing with flare.

Soon the girls went to bed, where they read and they prayed,
And their thoughts of dear Molly they stopped for the day.
But the fish did not stay all alone in her bowl.
After dark is when fish leave their bowl and patrol.

When the lights they went dark, it was time at long last
so she swam and she swam; she was going real fast.
Then she jumped up and out of the bowl that was home,
On the table she landed; ready to watch and to roam.

On her fins she did walk when no girls sat ’round starin’,
so now she would wander the house without carin’.
She slid down the leg of the table she lived on,
Then ran fast for the stairs; jumping over a crayon.

With hard work and with effort, she climbed all the stairs.
At the top she did stop for she had to beware
of the mom that would scream if she saw Molly there
in the dark, empty hallway where fish can’t breath air.

Molly walked and was soon at the door of the sister
Who fed her and loved her and now Molly missed her.
Without hesitation she walked up to the bed,
and proceeded to climb up and sleep by her head.

She stayed there all night next to sweet Adriana,
where she heard her dream of a cat she called Burma.
It scared Molly at first, but it was just a dream,
Because fish and cats don’t go together it seems.

The moon rose and it set and the light showed that dawn
had broken and twas time for Molly to be gone.
From the room Molly slipped and slid down the handrail,
and was back in her bowl by the skin of her tail.

For the girls were now up and  “Good morning!” they said.
They gave Molly food and then they watched as she fed.
Molly stared back and gave them a wave and a wink;
“Ha, Surprise! I do more than just play in the sink.”

Creating with a Constraint

When I was in school, it was rare for me to finish a report before the deadline. It really did not matter if the professor gave me a day, a week, or a month to complete it; I didn’t complete it until just before class.

Part of the issue for me was prioritizing. It always seemed like a night playing basketball or video games was a higher priority to me than finishing a paper I had another week to finish.

But it was not just priority. It’s the constraint that a deadline gives. With no constraint, I have a hard time conceptualizing what to do with the excess time. If I thought the paper would take three hours, what would I do with the other hundred hours I could use?

In the business world, there is another constraint. Our partners have budgets and we have to deliver the best solution we can within their budget. As a creative person trying to craft a solution out of 1s and 0s, that’s often a hard concept to grasp. I hear “best solution” and I start thinking about all of the cool features I could build. I want to think about mobile and tablets and responsive design and ajax and push notifications and modularization and reusability; any number of things that could make the application the very best it can be.

The problem comes when the perfect solution in my mind does not match the budget the partner has approved. That’s when I have to change my mindset. I have to understand what the partner needs and find a way to deliver the very best product I can within their budget.

The budget is a constraint. The constraint causes me to be creative in ways that I would not be without it. If I think my idea of the perfect solution will take 100 hours, but I only have 40 hours to complete it, I have to find a way to craft a solution out of the time I have. Perhaps I have to ignore the latest technology because that would take extra research time. Maybe I have to make the module less flexible and just build it to fit the current need.

It is not about delivering less. It’s about delivering something great within the constraint.

Give yourself a constraint on something today. Give yourself one hour to complete that task you’ve been putting off. Tell yourself that you have to have the home remodel done by the end of the week. You’ll be surprised at the solutions you come up with when you make a constraint.

The Power of an Hour

Tags

I have been meaning to finish the novel I started in college since, well, since I started it in 1998. That’s a whole lot of time spent thinking about it, fretting over it, and ultimately not doing anything about it. It seems there is always something more important to do or something easier and more enjoyable.

Last year I made it a goal to finish writing a novel. Sure, it still was not the story I started back in college, but I was bound and determined to finish writing something. But there was still a hurdle in the way, and I am willing to bet that it is the same hurdle that many of you face when looking up at a goal from the ground floor.

Where will I find the time?

Right about the time I was wondering that, I read a blog post that had a novel idea. Put aside one hour each day and use it to be productive. No interruptions for 60 minutes. Don’t check email. Don’t go to Facebook. Don’t answer the phone.

Every day. 60 minutes.

So I gave it a try. Every day after work I spent 60 minutes writing. It was not much each day, but after a month I had written 20,000 words. By the end of the summer, I was up to 70,000 words.  In November, I made it two hours and completed 50,000 words in that month alone.

The novel stands complete. It’s just a rough draft and needs a lot of editing, but I can see the 400 page manuscript sitting on the table and know that I accomplished my goal.

That’s the power of an hour.  Don’t try to accomplish your goals this year all in one sitting. Take bite size chunks out of it. Do a little each day, every day, and you will be amazed at the results at the end of the year.

Good luck in 2013. I hope you hit all of the goals you have set!

Keeping your software young

Tags

, ,

Every once in a while, I look at the date and wonder how fifteen years have passed since I graduated high school.  Looking back at those four adolescent years, they feel more like four decades.  It is crazy to experience the speed of life.

The software we build wonders the same thing. Has it really been seven years since that website was built?  Wasn’t it just yesterday that Ajax was the thing of the future, and IE 7 was the greatest step forward in Internet history (ok, maybe that was never the case).

Time and Technology stop for no man, and it certainly does not stop for the applications we build. So what can we do to keep them fresh and healthy?  It’s not so different from the additional exercise, better diet, and regular checkups that we do for ourselves. In the case of technology, the key is to keep up on blogs, product releases, and to continue to use the application so you can understand its needs.

Microsoft released .NET 4.5  on August 15, 2012, and I was pleased to have a few minutes to install Visual Studio 2012 with .NET 4.5, and give webTRAIN, our Web Marketing Platform, an upgrade.

webTRAIN was built back in 2007 as a .NET 2.0 website using Visual Studio 2005.  Since that time, we have upgraded it to .NET 3.5 and have been using Visual Studio 2008 to code it.  I really have been looking forward to upgrading to .NET 4.0, but I wanted to wait until we had new servers with IIS 7 installed.

We made the move to a new 4 server network with IIS 7 a few months back. With that, we were finally able to consider moving to .NET 4.  I heard .NET 4.5 was around the bend, so it made sense to wait just a bit longer.

The actual process of moving into Visual Studio 2012 and .NET 4.5 was not as painful as I thought it would be.  We have run into two hiccups so far in our testing.

1) .NET 4.5 handles request validation differently that .NET 3.5 and .NET 4.0.  This came up specifically when trying to pass HTML from a Tiny MCE editor to our model.  We found the answer in this whitepaper. The portion that affected us was “Support for unvalidated requests’”, which I have copied below:

*******************************************************************

To allow this, ASP.NET 4.5 now supports unvalidated access to request data. ASP.NET 4.5 includes a newUnvalidated collection property in the HttpRequest class. This collection provides access to all of the common values of request data, like Form, QueryString, Cookies, and Url.

Using the forum example, to be able to read unvalidated request data, you first need to configure the application to use the new request validation mode:

<httpRuntime requestValidationMode="4.5" ...
/>

You can then use the HttpRequest.Unvalidated property to read the unvalidated form value:

var s = context.Request.Unvalidated.Form["forum_post"];

Security Note: Use unvalidated request data with care! ASP.NET 4.5 added the unvalidated request properties and collections to make it easier for you to access very specific unvalidated request data. However, you must still perform custom validation on the raw request data to ensure that dangerous text is not rendered to users.

*********************************************************************

 

2) After updating our development servers to .NET 4.5, webTRAIN seemed fine and dandy. However, we found that it caused an issue with an MVC app that used automatic build and deploy via Team City on our development server. It built the code against .NET 4.5 assemblies and when we deployed it live, where .NET 4.5 is not yet installed, it ran into an error.

The error was:

Could not load type ‘System.Runtime.CompilerServices.ExtensionAttribute’ from assembly ‘mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’.

We ended up having to retrieve mscorlib from C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0 and building it directly into our application.  It required a manual change to the programs’ XML file to include:

<Reference Include=”mscorlib” />
<Reference Include=”System.Core” />

There’s still lots more testing to do to make sure webTRAIN will play nicely with the new updates, but it’s great to know that we can begin to include Strongly Typed Datasets, Model Binding, HTML 5 snippets, and all the other great .NET 4.5 upgrades into our new features.  webTRAIN is feeling younger already!

Have you had luck upgrading to .NET 4.5?

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

The Cost of Interruptions (Or how to get things done)

Tags

I found myself sitting at my desk the other day, and knew that I had to get some work done.  The problem was that every time I started, something else distracted me.  Each instance I was distracted, it took time to remember what I was doing, build up the context that I had my brain set in before I was interrupted, and get back in the Zone.

Interruptions today are easier than ever. Here’s a small list of the interruptions that can find me from where I sit:

  1. Email notification
  2. Instant messenger for chatting with co-workers
  3. Desk phone
  4. Cell phone
  5. Internet!
    1. Facebook
    2. Google Reader
    3. ESPN
    4. CNN
    5. USA Today
    6. Detroit Free Press
    7. Research for my next vacation
  6. Meetings
  7. A window
  8. A grumbly stomach

It’s a wonder I get anything done at all with all those potential interruptions.  So then, what is the key to being productive?  It is not necessarily eliminating the interruptions.  Your brain craves distraction, and sometimes the distraction is what triggers the creative idea that you were looking for.

Instead, the answer is focused, uninterrupted time.  Here’s a strategy that works well for me.

A) At the end of the day, I make a list of the 2 or 3 most important things to accomplish tomorrow. Often there will be a number of ancillary items under the main items. If I get to them, great. If not, they’ll wait for another day.

B) When I get to the office, don’t check your email right away! A day’s worth of distraction awaits you there. Turn off the email client and put it away until later.

C) Turn the instant messenger to Busy so your co-workers know not to bother you.

D) Put your head down and work until at least 1 of the items is complete. If possible, complete them both.

E) Now that the day is rolling along, and you’ve completed enough that you feel productive, check your email.  I like to check it at 11 and 4pm, and do my best to avoid it the rest of the day.  If it’s an emergency, they’ll call, but it rarely is that important.  What is important is getting substantive work complete, and not just checking off small tasks that do nothing more than move a ball forward.

Give it a try sometime! I think you’ll be pleasantly surprised with how much work you can accomplish by focusing on 2 or 3 of the important tasks each day.

Researching why we get fat

Tags

, , ,

Everyone knows that if we eat more calories than what we expend, we will gain weight.  That’s easy and irrefutable, right?

We also know that if we exercise and cut out the fat from our diet, that will make us lose weight faster.  The government tell this to us, our doctors tell us, tv shows and commercials say it.

Has that worked for you?

It has not worked for me.  I work out 4-5 days a week, I play sports often, and I do my best to avoid red meat and pop.  I don’t always do it, but all that effort I put in has to balance out on my side of the equation.

But it has not. I continue to gain weight, I can’t drop the spare tire, and I have a very hard time staying away from sugar.

So is that the answer to the obesity epidemic? That America lacks the willpower to make itself lean? That is surely the message that is given to all of us.

But what if that is wrong?  What if the calories in / calories out doctrine that has been preached all of our lives is wrong?  What if exercise for the sake of losing weight is not the answer?

What if it is not how much we eat, but what we eat that makes us fat?

I read Why We Get Fat, and What To Do About It, by Gary Taubes on a suggestion from a couple of friends, and his argument will surprise you. It will also make you wonder why you never thought of it before.

According to Taubes, and innumerable sources he cites, it was not until the 1970s that our current way of thinking about nutrition took over our collective minds.  Before that time, everyone knew it was bread and beer and pasta and sugar that made you fat.  That is, the culprit was carbohydrates.

Carbohydrates now form the base of the nutritional food pyramid. If carbohydrates are in fact the reason we get fact, our government, which decries obesity, is in fact what is pushing us to get fatter.

Taubes shows how and why we came to believe the calorie in / calorie out idea of weight loss.  He gives historical evidence of why it doesn’t work, why eating the way the government prescribes makes people fat, and how all of those carbohydrates affect the body.

He also discusses how carbohydrates play a big factor in health, including diabetes, heart disease, cancer, and Alzheimer’s.

I strongly recommend you read this book. At the very least, you may answer the question of why you work so hard at losing fat, but it never happens.  And if your question is answered, you just may be convinced to change your diet.

I was. I’ve had very few carbs since September 10th. I’m going to stick with it a few months and see what happens, and I’ll be sure to let you know how it works for me.

Oh, you may be wondering what I’m eating now instead of carbs.

Fat. Yup, beef and sausage and cheese and eggs.  I’ve lost 4 pounds in 16 days.  Think that’s crazy?  Read the book and then let me know what you think.  You may just be crazy for eating spaghetti with a side of garlic bread.

Coding is Creativity

Tags

,

I was having a discussion about great literature the other day, and something that was said struck me as very applicable to software development.

“How did he build an entire world out of what was in his head?”

We were talking about Tolkien, and were both impressed with the breadth of material he created.  Sure, he wrote the Hobbit and the Lord of the Rings.  But supporting that was the creation of a couple of languages, most notably Elvish, and books of foundation legends.

The same could be said of music and art.  How does someone take what they see in their mind, and bring it forth into the world for others to enjoy?

I like to consider myself a writer, and since I have a book published at Amazon, and have even received a small check from its sale, I guess that makes me a published writer.  I am also a software developer, and have created applications for personal use, sale, and at the direction of clients.  You may think that on the surface, the two have nothing in common.  However, I have found that they are very closely related.

The Idea

Both a great story and a great application begin with an idea. The idea phase is exhilarating and freeing. There are no boundaries, no road blocks and no constraints.  Your imagination runs wild over what you could make and what you could do with it.

The Implementation

Once the idea is decided upon, a story and an application take planning.  There are some writers, and some coders, that can hop right into the details.  I’ve read a book on Stephen King’s writing process, and he’s fortunate enough to be able to watch the story unfold as he writes.  For me, I write like I code. I plan it out.

That’s the first step in implementation. Then I start coding the large portions of the application or outlining the different plot devices and characters. It’s in this phase that I see the full scope of what I envisioned, and start to give myself constraints such as time, cost, or word count.  Working with constraints inspires more creativity.  How can I finish this in a weekend?  How can I keep it under 100,000 words?  The constraint drives good design.

The Details

When writing, the difficult detail for me is creating believable dialogue. I can write fight scenes all day, but crafting discussion between characters is not easy.  In code, it’s often all of the small items, like the UI for the user signup screen, the retrieve password code, or making sure all the possible iterations of interaction are covered and tested.  It’s where the project is no longer fun every day, and the only way through is to roll up your sleeves and to keep moving forward.

The Payoff

Once my website is live, my application is released, or my story is in front of readers, the feeling is the same.  Relief that it is done, pride that my idea came to life, and concern that others will treat it with the same love and care that I did while building it.

Writing great code is an art, and one that is beginning to receive the recognition it deserves alongside literature, music, and art.

Scheduling is a breeze (Thanks to LiquidPlanner)

Tags

, ,

Back in February, we were buried under a mountain of work.  It’s not a bad problem to have, but it sure made for quite the logistical nightmare.  It was not easy to schedule dozens of projects for dozens of team members and still make sure we hit our deadlines.

I wrote about the problem at that time, and a small sliver of hope that had appeared on the horizon. That sliver of hope is called LiquidPlanner.

lp

We have been using LiquidPlanner since February, and it has significantly streamlined our process.  Instead of juggling a calendar for each team member in Google Calendar, we just assign tasks to a team member, put a low and high estimate for how long it should take, and let LiquidPlanner handle scheduling the project.  It’s easy!  The whole team participates in project management now because they can see all of the tasks assigned to them and how it affects the schedule.

Instead of using Basecamp to handle messages, to-dos and file management, LiquidPlanner handles that too. Tasks are central to LiquidPlanner because they drive the schedule. It also allows us to comment on tasks, add messages, and work with clients.

As an added bonus, we can track our time against a task.  So, we’ve eliminated our home grown time tracking system and instead track time directly in LiquidPlanner.

LiquidPlanner is not all rainbows and unicorns.  There are a few things that were nicer in our previous systems, or could use some improvement.

  • The upcoming schedule is not as easy to read as Google Calendar.  They do a great job handling a LOT of data, but it takes time to get used to.
  • Communication is not as nice as it was in Basecamp. The biggest issue is not being able to tie files directly to a comment. 
  • If I assign a restricted member to a task in a project they don’t have access to, they should automatically be added to the project.  Too often we have tasks that people can’t see.
  • Pricing is per user, so it can get pricey.

But in the end, not having to use 3 different systems, and scheduling that is WAY easier makes LiquidPlanner a no-brainer for us.

If you have lots of projects that need to be schedule across many different resources, and you are tired of using MS Project, or cobbling together multiple systems to try and create something useful, give LiquidPlanner a try!

Aaron Brander is the VP of Technology for MINDSCAPE at Hanon McKendry.

Rainy Days are here again

Tags

,

It’s been a hot, dry summer in Michigan, unless you count the days that my wife, Denise, and I have gone camping.  It has rained every time that we camped.  No joke! Let’s do a quick recap, shall we?

Memorial Day weekend
The rain was so bad this weekend that we did not even leave the house. We planned on taking a hiking trip with our friends, Tim and Shanna, but the forecast was for 90 degrees and thunderstorms.  This time, the forecast did not lie and it rained cats and dogs.

June 1st – June 3 – Leelanau State Park
We took our four year old niece, Adriana for her first weekend of camping in Leelanau.  It was no longer 90 degrees, instead it was 60 degrees and raining. Adriana was not happy that we couldn’t swim, but we had a great time on a bike when we visited the lighthouse.

photo

579450_4167719673872_1882340836_n

June 22 – 24  Ludington State Park
Later in the month, we took Amelia, our seven year old niece, camping for the second year in a row.  We loved the rustic campsite on the shore of Lake Michigan, but once again the weekend was interrupted by rain. We were lucky enough to have one great, sunny day to hit up Sleeping Bear Dunes.

376201_4356185545401_403183999_n

391338_4356183825358_1839390299_n

June 30 – July 4 Porcupine Mountains and Copper Harbor
We fled to the U.P. to escape the heat, and found ourselves with 100 degree days in the Porcupine Mountains!  We enjoyed a great hike through the mountains the day after our 12 hour drive, and then it was on to Copper Harbor. We were joining in with my parents and two sisters who were taking and extended trip through the U.P. 

And what did it do in Copper Harbor? You guessed it, it rained. This time it was a huge thunderstorm that rocked our tent and made us very glad that we mostly stayed dry. Our Coleman Hooligan is a great tent.

July 13 – 15 Otsego Lake State Park
We ditched the tent, and borrowed Betty, my parent’s RV, for a weekend  up north with Denise’s sister’s family and two brothers.  We all had a great time, except that it rained! 

It rained all afternoon after we went to the beach. It stormed minutes after we got back in the water that afternoon. It rained during lunch. It rained during dinner. It stormed the entire second night! The park host said it hadn’t rained there the entire summer until we showed up!

It’s a good thing we had that RV. The backpacking tent we brought for Denise’s brothers did not hold the water out, and they would have been soaked the second night. Instead, we piled six adults and two children into the RV.

411959_3903914448078_1311083862_o

So, with that, I announce my new business! If you need rain, you can hire me for $100 / day plus travel expenses. I will come to your location in my tent or RV, and it will rain, 100% guarantee (unless my presence brings fire instead of rain. That’s happened in Idaho and in southern Australia).  Book at your own risk. You may get more than you bargained for.

90 Day Challenge–The Finish Line

Tags

, ,

90 days goes by quickly when you are having fun.  I expected this diet to be much more difficult than it ended up being.  A shake for breakfast, a shake for lunch, and a normal dinner. In between, I grew to love almonds and banana chips, and ate more yogurt than I had in years.

The final result? Down 15 pounds and 4.5 inches off of my waist.  I had to ditch all of my pants and buy new, so that was a hidden cost I was happy to pay.

Along the way, I taught my stomach to be happy with much less food, and tamed my sweet tooth so it is not quite as voracious as it once was.  Yay!