Latest Entries

Class 6 Rails dev notes…

The latest in my really, really rambling notes. I’ll be posting more coherent blog posts moving forward on Built In Chicago. Here is all about notes and learning for the time being. Having fun doing it this way too!

—NOTES—

Square brackets can mean that you want to go grab something out of the hash…

When you have a collection of things, go grab a specific thing

hash is key = {:value} based

product = { :name => “iPad 2″, :price => 499, :quantity => 2}

puts product[:name]

to change the value within the hash simply redefine the value

put S strips the colon off of the symbol value prior to printing the string

to target deep into nested hashes, simply use the [:target] approach to drill down to the level and value that you are searching for.

#targeting information within nested hashes

params = { :shipping => :standard, :customer => { :name => “Patrick”, :city => “Chicago”} }
#technique 1
customer_data = params[:customer]
puts customer_data[:city]

#technique2
puts params[:customer][:city]

use string interperlation to put numerous values from the same hash together in an output

What is in a http request
URL + Method + Format

Method has four main possibilities [ get, post, put, delete ] (up to 7 methods actually exist)

The URL does not tell the app what to do… (uniform resource locator… it knows where things are but it does little)

Your web application is no more than the value you provide to your users. But we should shift our thinking away from what pages do I need to what resources do I need to provide.
The method changes… not the URL.

Web request > Rails app > Web Response
is actually
Web request ( params [...] ) > Rails app > Web Response

Forms in Rails
<%= form_for @station do |f| %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.submit %>

<% end %>

the params of this form are @station and :name

rails uses .pluralize and .singularize to try to help the creation of classes, methods and routes

use the network tab in chrome to view the method and request of the page that is being served


Break No. 1

replacing the .new method with .create

Station.create (params [:station])
redirect_to “/stations”

but your more likely to see something like the following
Built using a local variable
station = Station.new(params[:station])
station.save

Editing an existing value
> in controller.rb

def edit
@station = Station.find_by_id(params[:id])
end

you need a put method within routes to subimit the updates back into the database

never allow for a link to exist on your server for creation and deletion of data without a rel=”nofollow”… without this, search engines like Google could systematically delete your entire database of information

Route naming conventions
get “/stations” => “stations#index”, :as => :stations

method “/URL” => action, :as => name I would like to use

Renaming routes in routes.rb
redirect_to “/stations/#{@station.id}”
becomes
redirect_to station_url(@station.id)

but screw this noise…
> replace all of it with…
resources :stations

the long way isn’t wrong… but it’s important to know that the short way isn’t magic

what does resources :products do
URL > verb > action > named route

….

create new app

1: rails new transit_chicago
2: cd transit_chicago
3: rails generate scaffold Station name:string address:string info:string
4: rake db:migrate
5: mate .
6:

… scaffolding is not intended to be the finished product.
Just like when you are building a house with scaffolding, you should not leave up the scaffolding when the house is finished.

….

don’t wait until you know everything to start building your app…

plan on refactoring and rebuilding your app over and over as the course continues.

get comfortable with throwing code away and starting over.

….

Model Validations
Business Rules: things that must happen to keep our model organized and useful (someone can’t sign up with the same email 15 times, etc) — sometimes called Domain Logic

example:

class Movie < ActiveRecord::Base
validates :title, :presence => true
end

rails g model title:string year:interger

within models create a validation statement to keep bad or incomplete data from making it into the database

class ModelName < ActiveRecord::Base
validates
validates
end


if you change your code in textmate, you will either need to restart rails console entirely or reload!

model objects have a way of telling you why a model is invalid

m.valid?
output=true/false

m.errors
this is a collection of error feedback, like…

m.errors.full_messages
output= [“Title can’t be blank”, “Year can’t be blank”]

01/25: Entrepreneurship & Legal Hurdles

Full disclosure: I’m really starting to dig this whole public note taking thing. My notes are yours. Share the knowledge and let’s talk about the things that are being discussed so we can take all of this information and put it into action!

Some of this will be gibberish (have you ever looked at your own notes?) But some of it you might find helpful. Dig in.

Quick lunch at Code Academy…

Legal topics to keep in mind, with Brian Axelrad.
baxelrad@hmblaw.com, 312-606-3242

Go read
Brad Feld: How to be smarter than your lawyer and venture capitalist

You’re looking for a business partner in a lawyer. If someone is going to bill your startup by the quarter hour, that’s not a lawyer that is really interested in helping your startup business. The upside for lawyers who deal with startups is the future of the business, not the immediate billing.

3 things to keep in mind with legal issues…

1) Ownership: If it has to do with who owns what, contact a lawyer.
>Equity:

>Classes

>Majority:
When starting a company, your obviously going to have a majority. But understand that you will be diluted over time if your company is successful and needs to grow.

>Employees:
Have hard conversations with people you bring on at the beginning. You don’t have to lawyer up, but you have to cover your bases. It’s sometimes best to get everyone in the room together and just buy people out when the company is worth nothing.

>Vesting:
Making everyone vest protects them and protects you.
–>Cliffs: You don’t get anything until you clear a set date or goal. So if you have a four-year vest you might not actually have any interest in the company until one year has passed from the start date.

2010-2012 example…
You get an investment. The company is not profitable and was formed in 2010. You are two years into the company. If you haven’t done any vesting up to the point of the investment, the investor can then anchor the discussion with their money to their own ideal vesting schedule. Protect yourself by getting credit for the time spent before investment comes into the picture.

>Valuation:
As investments come in, your company begins to get a set value. This creates the floor for your company. If your floor is too low, it impedes your ability to raise money in the future.

If you are taking in a ton of money, expect to have a lower percentage of the company.

>Getting fired:
What happens when you get terminated from the startup.

If you get terminated for cause, you could lose your equity. Cause is major stuff (felonies, etc).

Without case is ‘you suck’. In those cases, you’ll exit at a lower rate but you’ll have something.

>IP Ownership:
You have to assign the IP and assets into the LLC. IP is very broadly defined.

There is a statute in Illinois that states you can have ownership over the IP of an idea provided that it is outside of the industry of your current employer, regardless of any agreements that may have been signed between yourself and your day job.

To work on any startup and hold another job, you must have the awkward conversation and ask for a release of claim for the IP created for that startup. No one wants to have that conversation, but its the only way to protect yourself.

All LLCs should have a representation and warranty clause signed by all members of the LLC assigned IP created to the LLC and guaranteeing that no one can claim that IP as their own.

2) Risk: Anything involving risk, potentially contact a lawyer. The scale of risk will impact exactly when someone should get a legal advisor involved.

You need an LLC to protect your personal assets.

>Liability:
—> Leasemaid.com… started the business but is not incorporated yet.
… Sole-proprietor, totally exposed. If he brings in parters, it becomes a general partnership. If something goes wrong, you are personally exposed.
—> Furnishly.com… started a business and has formed an LLC.

Generation Real Estate Inc.: Formed a C-Corp.

>Pass-through:
—> You don’t get double-taxed with an LLC.

LLC vs. Corporations
To switch between a corportation to an LLC would require the corp to be dissolved to form the LLC.

Most of the time, when an investor asks that you reform your LLC to a corporation its generally grounded in a tax concern.

It’s easier to go from LLC to corporation than the other way.

You form an LLC first because;
if you are generating a profit in the short-term, the LLC has simple pass-thru.
LLC’s are very flexible. Has a default statute for operating agreement.

Delaware vs. Illinois filing
Delaware you can throw out anything in the statute. Illinois has protections built in for minority owners that can not be thrown out—which is why investors like Delaware, for flexibility.

File in Delaware. You do not have to register your business in Illinois. But you should. Eventually.

However, while there are some costs reasons around filing here or there—cost should not drive your decision.

100% of the tax profits and the tax losses can be applied to anyone in the LLC. IRS will not care so long as the bill is paid. This includes passing the tax losses through to an investor. This could make your company more attractive to angel investors.

3) Compliance: If you think you are on the edge of a legal boundry: contact a lawyer.

Now hearing from Maria from Built In Chicago. (builtinchicago.com)

Founded by Matt Moog. Roots from discussions with folks at Groupon and Vibes media.

Built overnight. A much prettier relaunch coming in February. New World Ventures, Lightbank, others provided initial funding.

7K registered users. 35K monthly uniques.

70% of visits from Illinois. Most the rest is coming from the coasts.

Built in Chicago meetup coming soon.

Working closely with 1871. (Matt Moog deeply involved in that as well.)

1871 slated to open in April.

Office hours will be moving from Excelerate to 1871 in April. (sounds like she is saying Exceler-it. hmm.)

She’s been asked about her favorite company of 2012… talking about bootstrapped legal teams like TotalAttorneys and shifting gears to talk BrightTag, Groovebug? etc.

Be a good PR person for your product and idea and yourself. You are your best advocate. Be humble but be vocal. People will not find you if you are hiding in the corner.

Promoting via Built in Chicago touted by the guys from EveningFlow…

Burn it to the ground

So I was having some conflicting gem issues which were not allowing me to create new rails applications (kind of a problem when you are in class to create new rails applications…)

Anyway, I’m torching everything and starting over. This process is encouraged by the folks over here as you tend to remember and learn the foundation of most things through repetition. I can attest that this install is going much better than the first round.

The steps I am following are covered in the Hartl tutorials. I’ll link to it later when I have time. I’m also finding that my mentality about editing is shifting—fast. Trib taught me to obsess over getting it right over getting it out. This mentality just doesn’t work in today’s tech-driven environment.

You always will have a chance to refactor (edit) your work. You can always go make it better. If you wait, you’ll miss the window. Just get it out already.

Blogging my notes: Class 5

So we’re going to try something new today… In effort to put my Code Academy experience online, I’m actually going to blog my class notes today. Seems like it will be helpful to myself for access to my notes while also being helpful to my classmates if they have missed a class. Additionally, people considering Code Academy can look at these notes and get a sense for what we are covering.

This is class 5 of 24 in the Rails development track. Full disclosure, I tend to trail off once the labs start getting more intensive—the notes are hard to keep up. Also, I record a screencast of each class (5 hours) to go back and study later.

Jeff Cohen breaks out the Pickaxe book… Programming Ruby 1.9… seems threatening

Today/this week we’ll be covering the following

Arrays and Blocks
MVC Recipe
CRUD Your Data (Create, Read, Update, Delete cycle)
Rails Resources (how do you take your idea and make it real… this is beyond just coding)
Model Associations (minor miracle will occur if we hit this during the week)

Weekend of February 11th will be Code Academy startup weekend… start on Friday, runs through Sunday. I’ll basically be living here. Looks like former Excelerate/current Sandbox company Fee Fighters will be sponsoring. Cool.

This could be the datetracks (!?!) push weekend. Be on the lookout.

Create a new folder under ‘views’ called stations.
Create an index.html…

remove the html from the controller and point the controller to the index.html file

in routes.rb
get “namehere” => namehere.index.html

Instead of hard coding P tags… automagically generate a loop from an array instead of hard coding…

try…

class StationsController < ApplicationController

def index
@places = ['Chicago', 'State', 'Jackson']
end

end

or instead inside of your index.html file...

Product List

    <% @places.each do |p| %>

  • <%= puts p %>
    <% end %>

don’t forget to add .erb for the embedded ruby within the html file…

—> Time to generate a model <---

start in terminal with

rails generate
>> This will provide options for what you can generate

rails generate model
>> This will kick out additional helper items

rails generate model station name:string address:string style:string

now in rake db:migrate you should see this…

(having problems? consider a rake db:drop)

class CreateStations < ActiveRecord::Migration
def change
create_table :stations do |t|
t.string :name
t.string :address
t.string :style
t.string :color
end
end
end

Migration allows for you to operate in an agile manner and add to your database over time rather that having everything set up all at once.

once the model is created run a rake db:migrate to save the model.

---

use station.create to insert data into your model

instance: x=Station.new

Station.count skips the individual entry

Station.all[0]
this returns the first entry in the database from the class Station...

---

jump back into the stations_controller.rb

---

Route Placeholders:
1: Define a route that connects a url path to a controller and action

#config/routes.rb

2. Add a controller action method
(using the params hash to grab the placeholder value that was in the actual url)

#app/controllers/product_controller.rb
class StationsController < ApplicationController

def index
@all_stations = Stations.all
end

def show
the_stations_id = params [id]
@the_station=Station.find(the_station_id)
or
@the_station=Station.find_by_id(the_station_id)
end
end

3. Write a view template to generate

I need to spend more time in
RailsGuides
api.rubyonrails.org (this is auto generated from the code itself)

---

Let's update rails to 3.2...
gem install rails --no-rdoc --no-ri
>> no rdoc basically just strips out the documentation

—-

Even more notes from the Google Doc…

The times method

example:
15.times do |n|
puts “something here
end

> collections/arrays always start at 0

names = [ “name1”, “name2”, etc...]

puts names [0]
puts names [1]
etc…

or…

5.times do |n|
puts names [n]
end

>> refactor
to find out how many names are in the array..

l = names.size

so now…

l.times do |n|
puts names [n]
end

This allows your times method to execute on a string that has a unknown number of items.

names = [ “name1”, “name2”, etc...]

class Person
attr_accessor :name
attr_accessor :favorite_color
end

x = Person.new
x.name = “Marcel”
x.favorite_color = “Blue”

y = Person.new
y.name = “Marcel2”
y.favorite_color = “Blue2”

people = [x, y]

l = people.size
l.times do |i|
puts people[i].name
puts people[i].favorite_color
end

refactor

people.each do |person|
puts person.name
puts person.favorite_color
end

cool trick…
command-control-shift-E (execute within textmate)

Building webpages in rails…

Simple page demo: To display a list of train stations
1. Route definition
2. Controller class
3. Action method

We’ll be using only two of the elements available in rails (routes and controllers)

Step 1: Define route
# config/routes.rb (you’ll delete all the comments here)
myapp::application.routes.draw.do

get ‘stations’ => ‘stations#index”

Step 2: Write a controller
#app/controller/stations_controller.rb
class StationsController < ApplicationController

Step 3: Add action method to generate html
class StationsController < ApplicationController

def index
render :text => “

Station List


end
end

Steps to start:
1: rails new AppName
2: cd AppName
3: open new tab
4: rails server
5: open chrome
6: localhost:3000
7: mate .
8: Public/Index/html
9: Remove this Index file
10: Begin error-driven development
11: define route in config/routes.rb
11: Create controller in app/controllers
12: create new controller file (stations_controlller.rb)
13: create class within the file (be sure to add an end to the controller)
14: create an action (method within the controller)

— this is a complete webapp in 8 lines of code —

week 5 timewarp…
in terminal: curl -v http://localhost:3000/stations
(this is a peek into what a web browser does, but runs within your terminal)rails

when you see uninitialized constant, it means that you have not defined a controller

to redirect the browser:
redirect_to “http:// wherever you’d like to go”

—-

Time to start building a model!!! MVC in full effect…

Oops… we cratered the notes here…

—-

Introducing JSON

Talking about the Twitter webview…

Looking at the JSON version
api.twitter.com/1/statuses/user_timeline.jason?screen_name=jeffcohen

[{

Starts with a bracket and a curly brace

This is an array with a hash within it...

We can provide our data in JSON as well...

def index
@all_locations = ["Metra", "State and Lake", "Fullerton", "Randolph"]

respond_to do |format|
format.html #{render :text =>

Station List

}
format.json {render :json => @all_stations}
end

Quick note: 1/23

You can’t get enough practice… tonight was all box model stuff from Shay Howe at Code Academy. But something that I needed a refresher on. It’s not that any of this is space age stuff (yet) it is more of a lack of consistency in my day-to-day that has hindered me from grasping some of the concepts from project-to-project. You work in code twice-a-year and you’re bound to forget most of it.

Time to change that.

Otherwise, it was a hectic day of wireframing the app, meetings falling through and training folks at the tower. I’ll never get to where I am going if I fail to replace myself. And I WILL get to where I am going.

Rails in the morning and a edition of the Bulletin to kick out.

Work now, sleep soon.

Quick note: 1/22

My goal with Code Academy is to make a bigger impact with every punch. You can’t scale time, so you must find a way to scale the impact of your effort.

Today’s thought. Sell experience. Only build things that someone will pay for. Have a plan to generate attention for your product vs. simply planning to scale. We all hope to scale, but to have the need to scale you must draw a audience.

Headphones back on, head back down.

Volume on max. Ambition on high. Skills on rise.

Making it to the boat

If you’ve ever watched the movie ‘Children of Men’ you’ll know how important it is to make it to the ‘Tomorrow’ vessel.

This isn’t the type of film you should watch if in a negative state of mind—unless you’re trying to exhaust yourself of the feeling.

For the uninitiated, ‘Children of Men’ is set in the year 2027, when humanity had lost its ability to reproduce. In short, no babies, no children laughing, nothing good had occurred for 18 years. No known hope in sight for the future of humanity.

Imagine being a toymaker in that scenario—you can be the best at your craft, but if there are no children to purchase your toys then you are out of a job.

The year 2012 isn’t nearly as bleak as 2027, but I can’t help thinking that I watched that movie for a reason.

I’ve been working everyday on a new product for my employer since Dec. 19th. The idea was that I would carry it though the holidays and then get some relief so that I can focus on putting much more time into learning and acquiring a toolset that will help us build a future for ourselves and the industry. That’s what going to Code Academy was suppose to be all about—working smarter. Building a better future. Hell, building A future.

But there is an apathy that courses through most modern workplaces. I can’t improve the skill set of people who don’t want to improve and grow as professionals. I’m pretty sure this is the same in most corporate environments, so what I am experiencing isn’t as much a problem with my workplace—but with American workplaces in general.

Why did I single out American workplaces? Last year, I had a chance to visit operations in three foreign cities—Beijing, Dougguan and Moscow. In each place, I saw a vibrancy—a hunger—that we lack in most of our organizations.

I said most and what I meant was most major corporations. The places where I’ve seen vibrancy and drive in the American workforce has been within the local tech startup communities (particularly in Chicago).

They work hard, long hours, too. Being at a start-up isn’t the path to instant success and a lighter workload. It’s about pain and failure—but those folks putting in the big hours and pulling all-nighters are in it together. There is nothing worse than working through the night for a big organization where the general population is apathetic to the idea of making something new and moving the organization forward.

I’m really proud of my former team at RedEye, who have managed to embrace change and have made smart, fundamental changes along the way. But they have always been more of a startup within a big organization than part of the organization as a whole.

That’s not to say that they don’t have big challenges ahead of them. They’re a media entity that makes their dollar by delivering information and experiences to their users. Notice I didn’t call their readers the customer—because they are not the customer. Your customer is whomever is paying the bill—and readers do not and have not paid the bills to keep media organizations pushing forward in years.

Holding onto this user base will be challenging and require new approaches to what we consider news to be. Being that data is the ‘new’ news, I really think the more we can train the workforces to build data-driven experiences, the better off the media industry is going to be as a whole.

Which gets me back to the future and why making it to the boat matters.

Right now, I am killing myself. With no end in sight, I could conceivable work 60, 90, 120 days in a row. What’s worse is that I sense that this is becoming expected. Somehow, we transitioned from ‘working smarter’ to ‘Chris will get it done—we can count on him.’

That’s not such a bad thing, right?

But I’ve also realize that no matter how hard I work, I’m never going to see a return on my time investment within a large organization. To move up, you have to move around. Everyone else does it—so why can’t I?

Because I hate that mentality. I’m a pretty loyal guy. I like to build things. Grow things. But by staying at the same place for 11 years—now I’m just expected to do this—7 days a week.

What’s worse, it’s my own fault. I’ve let this happen to myself. The people who complain, they advance. The people who perform? I am a testament to what happens to those folks—they get the short end of the stick.

So how to I stop this mad cycle?

Change the skills set. Educate myself. Take more chances. Stop asking for permission.

To get this started, I joined Code Academy. I have a narrow window of access to some of the smartest folks in the Chicago tech community. I’ve always wanted to build things that can scale. You can’t scale a news story or a photograph—but you can do amazing things with a database.

The problem I’m going to have is immersion. I need to immerse myself in the code.

I’m grasping the convention of Rails in class, but I’m losing the code between the classes.

I need to code daily. Hourly. No coming up for air. I need to shut everything else down to be my best at this.

And if it matters—if it is the key to unlocking my future—how much is 10 more weeks to ask?

I can work around the clock. I can work every day. I don’t HAVE to sleep. I know I NEED sleep. Otherwise I’ll die.

I’ll also have to start making hard decisions. One of those decisions will have to be putting my workplace in place and defending my right to grow as a person. Defending my descire to have a future beyond my current capabilities and skills.

But like the movie, my goal is to make it to ‘Tomorrow’. And I know I’ll make it. I just don’t know if I’ll be around to enjoy it.

Looking for me?

I am uber busy right now with a full-time gig, a start-up incubator, a mobile gaming platform, a family and the looming threat of cancer always lurking over my shoulder (seriously, the next 4.5 years of my life might be hell if I don’t stay busy).

That said, I have a new video blog that is covering my summer of start-up frenzy. If you’re interested at all the world of internet start-ups, check out http://100pitches.tumblr.com/ where I’ll be posting video updates several times a week as we roll through Excelerate Labs program toward a August 31st launch!

37 reasons…

When you get in a street fight with cancer and manage to come out on top, getting old isn’t something that bothers you anymore. Let me clue you in on why.

No. 37: I literally didn’t think I would be here when I turned 36. If there was ever a time for a celebration—now would be it.
No. 36: After cancer, how old you are becomes a badge of honor. I imagine that anyone who had a prolonged near-death experience would feel the same way.
No. 35: My kid gets a complete kick out of is when I play hide and seek with her around the house. She likely would find the game to be pretty boring if I only hid in the same spot in the ground—permanently.
No. 34: There is no turntable.fm for dead people. I will be forced to remain alive until someone solves this problem.
No. 33: Since I beat cancer, I was able to pitch in and be half of the total viewing audience of ‘Chicago Code.’
No. 32: There is finally a Chick-fil-A in Chicago. This is no time to checkout.
No. 31: We’re in the middle of what appears to be the resurgence of Arkansas football. After spending a decade in the Nutt House, I’ve earned the right to see the next ten years of Petrinoville through.
No. 30: I get at least a little more time on this Earth to figure out what I am going to be when I grow up.
No. 29: Without cancer looming directly over me, I don’t have that whole Bucket List mentality clouding judgements.
No. 28: At my lowest, I got punched in the gut for working to hard for the wrong reasons. Now I get a shot at changing that.
No. 27: Technology is on the cusp of doing some amazing things that will change how the mainstream functions. I get to see it happen.
No. 26: It’s Chicago’s turn in the driver’s seat. I want a shot at the wheel.
No. 25: There has been a fair share of hate floating around lately. Give me a minute and I am bound to pay a few people back. Not now, but soon.
No. 24: I like to build cool stuff. Both the Trib and my outside endeavors have interesting stuff in the pipeline.
No. 23: Given enough time, your faith in humanity will be restored. But never in the way that you would anticipate.
No. 22: I get more time to spend with my family. Nothing can replace picnics at the park.
No. 21: Before cancer, I wasted a ton of time on complete BS. Now I am more focu… Did you see this video of a Chicken wearing a Camera? Hilarious.

Where was I?

Doesn’t matter. I have chubby grids to tame.
Be good. Keep building. Screw cancer.

Now back to work.

Resolutions

Chemo never lets reality slip too far away from you, but I’ve been pretty close on a few occasions recently.

See, no one else around me seems to think anything is wrong with me. People who meet me for the first thing think the bald thing is by choice and my weight is no longer a Skeletor-type situation.

In short, there are times that I feel quite normal.

I was reminded tonight how far I’ve come in the past few months.

I spent New Years Eve out with my family and some of my closest friends. I had the energy to keep up with a 7-year-old dancing fool to Wii. The smiles that we all shared were genuine—none of the fabricated I’m-so-happy-to-be-here-in-this-room-full-of-strangers mess that we’ve all spent far too many NYE’s being part of.

The sheer number of cool projects that I have my hands in these days has me overjoyed with excitement with what the next few months might mean for me from a personal fulfillment perspective.

Professionally, I’m about to start a new gig soon working for someone who I’ve basically spent the past decade trusting and I am certain to my core that we are poised to win.

Notice that no where in there am I focused on the fact that I am in round 7 of chemotherapy.

It’s not that I’ve forgotten about the reality of my situation. It’s just easier to focus on the blessings and realize how lucky I really have them.

This is the time of year when everyone looks back at the year and decade that we just flipped the calendar on. In those flashbacks, we always take account of those that are no longer with us.

Before cancer, I always focused on who passed and would occasionally think to myself something along the lines of ‘Damn, Dennis Hopper was cool.’

Now that I’m fighting cancer, those lists take on a different weight and analysis.

There are no dead celebrities. Just people that will never see their families again. From there it becomes a accounting of why those people died. The sheer number of cancer victims is staggering. People below 40 get extra attention—regardless of what reality show they may have been on. Nearly everyone in that camp falls into one of the following categories: a) suicide b) crash c) cancer. And its always way more option C than I am ready to handle.

Which brings me back to my reality. I feel like I am beating cancer. But the blackouts I experienced earlier this week would cause any sane person to pause before celebrating any progress. The docs say this is all normal—but what if it isn’t. I mean, we talked about how chemo would be rough but at this point I’ve had just as many blood transfusions as rounds of chemo. Just seems excessive and it begins to worry you.

So while I generally can focus on the things that I am blessed with, in the background I am clearly less certain about my own personal health and future.

So how do I change this situation? How do I turn a personal weakness into a strength?

I resolve to do better.

I resolve to get more sleep and eat better so that I might see more days on this planet.

I resolve to be more focused and productive at work—so that I might lead a more fulfilling life outside the office.

Waistline resolutions and productivity goals are for people who don’t have enough big things to worry about. And I’m betting that resolutions grounded in continuing to live are easier to stick to anyway.



Copyright © 2004–2009. All rights reserved.

RSS Feed. This blog is proudly powered by Wordpress and uses Modern Clix, a theme by Rodrigo Galindez.