tag:blogger.com,1999:blog-47236584338604046942024-03-12T21:43:31.002-05:00Winslett'sChrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.comBlogger60125tag:blogger.com,1999:blog-4723658433860404694.post-78479401235401951742015-01-18T09:48:00.005-06:002017-04-13T08:23:55.647-05:00It all started with a bike rideOne year ago this Monday, I rode my bicycle to work for the first time. It was 2014, on Martin Luther King Day, a mid-January Holiday in the US, and I wanted to try something different. I’d found a route on Google Maps using the “bicycle route” feature. The route was flat, and would be 20 miles (32 km). Being a Holiday, I waited until the temperature was warm enough to start. I suited up with gym shorts, some running shoes, and packed a fresh pair of clothes to change into at work. Then, I jumped on my flat bar fitness bike (i.e. Trek FX 7.2) and I was off.<br />
<br />
The first day, it took me 1 hour 45 minutes total time (1:30 moving time) to get to work. Here is the activity: <a href="https://www.strava.com/activities/242750614">https://www.strava.com/activities/242750614</a><br />
<br />
The next day, I rode my bike to work to prove to everyone the first day was not a fluke. And again, the next day. The first week, I rode my bike to work every day for a total of 100 miles.<br />
<br />
The next Monday, I couldn’t be the guy who rode his bike to work one week. So, I got up and rode my bike to work. By the end of the second week, I’d cut my moving time to 1 hour 19 minutes (with a total time of 1:29).<br />
<br />
Since my first ride to work, I’ve ridden 4254 miles (6,847 km). Most of them are commuting miles.<br />
<br />
Here is my weekly distance over the past year — notice the lack of motivation in March / April 2014:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-CvEniW-0Hw4/VLvVlsm2h2I/AAAAAAAAEVA/E_NYnktjoBQ/s1600/weekly-distance.tiff" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="75" src="https://4.bp.blogspot.com/-CvEniW-0Hw4/VLvVlsm2h2I/AAAAAAAAEVA/E_NYnktjoBQ/s1600/weekly-distance.tiff" width="320" /></a></div>
<br />
<h2>
Health benefits</h2>
<br />
The first time I rode to work, I didn’t ride to get in better shape. I rode to try something different. But, after my first ride, I already felt physically better. Here is my weight loss graph since my first ride:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-wSFNLXDZduw/VLvVqotEnyI/AAAAAAAAEVI/VRYc_tGA944/s1600/weight-loss.tiff" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="92" src="https://1.bp.blogspot.com/-wSFNLXDZduw/VLvVqotEnyI/AAAAAAAAEVI/VRYc_tGA944/s1600/weight-loss.tiff" width="320" /></a></div>
<br />
<br />
After my first week of riding, I gained 5 lbs (2 kg). It took me about 2 weeks to shed that initial weight gain. The inches came off quicker than the weight came off, and I'm down a few waist sizes.<br />
<br />
Since riding, I've:<br />
<ul>
<li>run 4 olympic distance triathlons</li>
<li>run 2 half-marathon trail runs</li>
<li>played more — yesterday, I played soccer, ultimate frisbee, cricket, and went on a bike ride with the kids. I’m amazingly sore today and looking forward to doing nothing :)</li>
<li>had more energy with the kids and family with wrestling and fun</li>
<li>had a more productive year with work.</li>
</ul>
<div>
Generally, I've felt better about life.</div>
<h2>
Health detriments</h2>
I’ve had 3 meetings with asphalt — 2 minor and 1 serious.<br />
<br />
<ol>
<li>I was turning into a driveway that had a lip on it. I turned too thinly and the lip caught my tire, and smack. It was a slow speed smack with resulted in scraps on right hand and right hip.</li>
<li>A car right hooked me. She didn’t have her blinker on, didn’t check her mirrors, and turned right. I was off her back quarter panel where I could see her face in her mirror. But, when she turned, I was traveling too fast to stop completely. I slammed on the brakes, then smacked against her car as she turned. Fortunately, I was heading to the pool to try on my wet suit which was in my backpack. I landed softly on this pad, and popped up. The driver was more shaken than I was.</li>
<li>The race crash. By July, I was putting some miles down on the road. And, I thought “Let me race.” So, I entered a criterium. My race ended with with 4 transverse processes snapped off my back. That put me out for 2 weeks. It was the worst pain I’ve felt for a while, and I was very fortunate it was not worse. My wife was awesome at taking care of me!</li>
</ol>
<br />
Other:<br />
<br />
<ul>
<li>After returning from my race crash, my back muscles were still sore, but good enough to ride. I took the flat route to work. With a sore back, my back muscles weren’t strong enough to hold my torso, so I leaned on my hands more. Turns out, putting too much weight on your hands continuously while riding will cause “cycling palsy”. It is a temporary swelling of the nerves in the hand, which makes your hand not as responsive as usual. I couldn’t put my fingers together; the best I could do was the Star Trek greeting sign.</li>
</ul>
<br />
<h2>
Now for year 2 of cycling</h2>
Since I started riding, I’ve acquired a nicer bike (Madone 5.2) and I own lycra clothes (turns out it matters for speed and comfort). I’ve not shaved my legs — but I’m tempted because I would gain about 8% more speed.<br />
<br />
I’m mostly riding as a commuter. I’m planning on racing again soon, but I won’t be as aggressive–I’m going to chill in the back and learn the ropes.<br />
<br />
My goal is to ride 6,000 miles this year.<br />
<br />Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-24355352578882281362014-04-01T09:54:00.003-05:002014-04-01T09:54:08.882-05:00An old man and a baseballHave you ever seen an older man handle a baseball? His hands are wrinkled and weathered almost to leather—the kind of man who played baseball in his younger years stayed outside sans lotion through his 60s. He gently rotates the sphere in his hand seamlessly moving to his favorite pitches: some spin to the two-seam fastball others to the four-seam fastball. Junkball pitchers slide to their finger position for a curve or drop ball. He had a short-term infatuation with a knuckleball, and remembers the heartache of the pitch. His hands are gentle with the toy, neither crushing it nor letting it fall. His wrists become light, rocking the ball back and forth as he mimics releasing a pitch.<br />
<br />
His hands caress the ball like a young lover's breast. His eyes, with his heart, look into the sphere like Adam looks at the gates of Eden. His thoughts cycle through his memories with his father, his friends, and his arch-nemesis. Every game is remembered; every homerun was proud jog around the bases; every strikeout pitch is enjoyed.<br />
<br />
Then, he recollects his eviction from the game. The day life took over and he had to quit, by his choice or not, the game he'd loved. The day he started having pain in his elbow, the day someone was a better hitter, the day he started working in a steel mill, his 1st year anniversary with his wife, or the birth of his second child. Remembering that breakup with baseball is emotional enough for him to hand the ball to a child.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-61658030838721142992014-03-16T15:17:00.001-05:002014-03-16T15:34:28.491-05:00Corporate Anarchy isn't the same as a Flat Organization<i>TL;DR ivory tower speak:</i> Because people are naturally power seeking, flat organizations can turn to anarchy when people play in all swim lanes of power.<br />
<br />
Employees at flat companies enable action through persuasion. Traditional corporations, based on authority, used coercion (you will pull this lever, and I will pay you a dollar). But, persuasion can be an interesting beast, and is not as simple as choosing the right path. Technology companies have enough different paths to success and the chosen path becomes a political choice more than a practical choice.<br />
<br />
If you assume, like me, that all of us seek power, then all the employees in a flat organization seek to be the ones making decisions. Decisions are the ultimate execution of power. Decisions in technology companies include:<br />
<br />
<i>What programming language? What database platform? How much to spend on servers? What features to build? Who to hire? Who to fire?</i><br />
<br />
Traditional organizations have a single person being the tiebreaker or vetoer for these decisions. Flat organizations don't have the judge, so employees must play to the jury. We aren't talking about black and white answers–we are talking about choosing between two choices that are both 7's on a scale of 1 to 10.<br />
<h3>
Swim Lanes of Power<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-xH7vv7VFzdA/UyYGgd1LUoI/AAAAAAAADlc/0VWw4j3FVLY/s1600/corporate-anarchy.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://2.bp.blogspot.com/-xH7vv7VFzdA/UyYGgd1LUoI/AAAAAAAADlc/0VWw4j3FVLY/s1600/corporate-anarchy.jpg" height="317" width="400" /></a></div>
</h3>
If all choices are between better than average and less than stellar choices, persuasion is no longer based on knowledge and ability. Persuasion becomes about preference. Preferences are skewed by relationships.<br />
<br />
With the flat organization, you have access to more people to persuade. Everyone is a both a manager and the bottom of the ladder. There are no roles to assume, such as leader of a team or manager of a product. Roles at traditional organizations subtly manipulate and motivate people to act the way to company needs them to act.<br />
<br />
Flat organizations, since they don't have granted roles and authority, enable employees to seek alternate means of power, unless held in check.<br />
<h3>
Traditional Authority Centric Organizations</h3>
Traditional organizations skew heavily toward authority by creating roles. An assumption of a role by an employee allows them to compartmentalize the other Social, Knowledge & Ability, and Physical power swim lanes. The issue with traditional organizations is the questioning of a person's source of authority (i.e. nepotism or friendship). But, the person with authority has authority, until he doesn't.<br />
<h3>
Sick Flat Orgs</h3>
Flat organizations are not equipped with roles to assume. Flat organizations require people to play in each of the swim lanes of power. If a person cannot find the power he seeks in Knowledge and Authority, and feels frustrated, there are two options: either follow or resort to other channels.<br />
<br />
For sick, flat organizations, dysfunctional power structures exist, and have their origins in the beginning of the organization. Those jokes and conversations that were in private between founders manifest themselves into company cultures.<br />
<br />
Unhealthy flat organizations have all of the sources of power in play. People use relationships, backchannels, verbal bullying, and disturbing others who are talking to maintain power. These are used to extol power of people, and thus bend to decisions.<br />
<br />
Sick flat organizations convert from meritocracies to oligarchies.<br />
<h3>
Healthy Flat Structures</h3>
Healthy flat structures are the other end of the spectrum. They consist of people who hold values above power. The few people that hold authority in a flat organization abhor the dysfunctional swim lanes and raise up people who pursue quality.<br />
<br />
Healthy flat structures are against human nature. It means you have to find people who are mature enough to forgo their thirst for power unhealthy regions. Then, promote a mature environment to reinforces good choices.<br />
<br />
Choosing a flat organization is a choice to rise above the standard. Cliques in high school are an organizational structure to rise above the flat structure of high school. As a company leader, you have to rise above the anarchy and inject proper values into the system.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-56412845560284186902013-09-10T15:38:00.000-05:002014-07-17T15:38:59.073-05:00Education : Don't Incentivise Success -- Incentivise Inputs and DisciplineMany of the popular incentivization programs for students look for positive grades. However, grades are an outcome, and outcome measurement is too late. Think of incentives on grades as dividing the output of a production line into two buckets: the outputs that match standards and those that deviate. Schools measure these because they traditional, easy, and accessible. Every student receives grades for every course, thus the data is accessible, and schools do not have to build anything new.<br />
<br />
<b>Schools should stop measuring student outcomes and start measuring student inputs.</b> Institutions should institute thin slicing student educational participation. When we measure student inputs, we are measuring the discipline of students to take charge of self-education.<br />
<br />
What inputs should schools measure?<br />
<ul>
<li>Quality Attendance - yes / no daily</li>
<ul>
<li>Participation</li>
</ul>
<li>Student Resource Usage</li>
<ul>
<li>Early and Often</li>
<ul>
<li>Usage 1 week before assignments</li>
<li>Usage 2 weeks before tests</li>
</ul>
<li>Book Purchases</li>
<li>Library usage</li>
</ul>
<li>Educational Ownership</li>
<ul>
<li>Active Calendar of Class Events</li>
</ul>
</ul>
The above inputs <b>do not</b> predict success ; I use the term "Actions Indicative of Success." Students can fail when doing any of the above. However, I have friends who failed college courses while pursuing the actions above, and they are much more successful than friends I know who flew through college.<br />
<br />
<br />Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-76091305400730248852013-07-08T17:00:00.001-05:002013-07-09T11:32:54.116-05:00SummerstormsAcross the plains, thunderstorms build like tanks,<br />
Armoring for war, forging allegiances in the battle for power,<br />
Marching eastwardly, gaining the energy necessary to unleash a torrent,<br />
Silently, marching, billowing from tall stacks, assembling energy.<br />
<br />
As with Munich, storms, casting shadows,<br />
Give pretense of cover from the harsh sun,<br />
Beautiful, unimaginably white cotton balls, move without motion,<br />
Promise the rain for crops, for pleasure--puddles for children,<br />
All the while, the maniacs build.<br />
<br />
Prophets proclaim the powers building in the west,<br />
Talk of storm fills chit-chat and worries,<br />
The storms are coming, marching, growing,<br />
Neither heeding rivers nor forests, the war march is steady.<br />
<br />
Schedules adjust to comply with a daily siege,<br />
Sentinels shout from towers, preparations are made,<br />
Cannon fire bares down on westward lands,<br />
News travels by wire of the sieges.<br />
<br />
Alliances are building against the danger,<br />
'Tis the night that brings the downfall of the western assault,<br />
Attacking the war-machines at their power.<br />
Supply lines are cut, disabling the most vulnerable,<br />
The siege's end is in sight, until the last cannon blast rumbles,<br />
No light escapes night's chilling power.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-87844550379372963512013-03-12T21:01:00.006-05:002013-03-13T08:16:43.861-05:00Alabama Accountability Act - the bright sideI flogged the Alabama Accountability Act a few days ago, and I've been turning it over in my head. If I was to vote on it today, I would vote "no". However, I am coming around to the idea of the act. The reason I like the act: it gives a framework for starting an independent school in Alabama.<br />
<br />
<b>School Funding Framework for Innovation</b><br />
<b><br /></b>
Imagine this: a group of people capable of obtaining accreditation can start a school, and they know they can get $3,500 per year per student. This is AWESOME! There are so many ways to do low cost (or free), above average course delivery:<br />
<br />
* <a href="https://www.khanacademy.org/">Khan Academy</a><br />
* <a href="https://www.coursera.org/">Coursera</a><br />
* <a href="http://www.extension.harvard.edu/open-learning-initiative">Harvard Online Courses</a><br />
* <a href="http://ocw.mit.edu/courses/index.htm">MIT Online Courses</a><br />
* <a href="http://online.stanford.edu/courses/">Stanford Online Courses</a><br />
<br />
And 1000s more sites with online training, exercises and more. With the online courses, a school could teach students to take charge of their education. This school could also focus on partnering with local businesses to bring back apprenticeships. Imagine the value of a school that delivered 4-hours per day of structured liberal arts training paired with practical real world apprenticeship programs.<br />
<br />
Anyone willing to take this risk, would know the budget would guarantee: $3,500 / student / year. Optimizing student improvement per dollar spent would be a good metric to start building an innovative education platform.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-39132870718288709582013-03-10T21:38:00.004-05:002014-07-17T15:37:19.423-05:00Retort to Del Marsh's Opinion of 'Alabama Accountability Act'<div>
The shortsightedness of Del Marsh's summary of the "Alabama Accountability Act" misses many major points about the economics of education in Alabama. In fact, he speaks of Alabama Education like he does not know the past, like he is an alien who landed on a planet looking to solve a problem.<br />
<br />
The "Alabama Accountability Act" is not <i>innovative</i>. It will not advance education of the state. I could have predicted this bill 35 years ago during school integration. The Act will have effects, but none of them will improve education.</div>
<div>
<br /></div>
<div>
<b>Alabama Inequality of Schools is Due to Racism</b></div>
<div>
<br /></div>
<div>
Del Marsh begins his article with:</div>
<blockquote class="tr_bq">
Image for a moment that you are a parent of a child forced to attend a public school with reading and math scores that rank at the bottom of the state ...</blockquote>
<blockquote class="tr_bq">
You know your child shows promise, but circumstances seem to conspire against putting them in a better learning environment. </blockquote>
Then, he goes on for another two paragraphs about how we should rescue children from failing schools. Little does Del Marsh realize, he is the one who puts kids in failing schools (as we all are). <br />
Birmingham's "over the mountain schools" have world-class school systems that were explicitly created to legally avoid integration. Montgomery private schools are built for the same purpose.<br />
<br />
We have an opportunity for equality with schools, and that is with true integration. Until then, it is my belief that all plans such as the "Alabama Accountability Act" are more of the same.<br />
<br />
<b>Alabama Schools Have Competition</b><br />
<b><br /></b>
The competition to poor education is to move your family to a better school district. In Alabama cities a family can move 2 - 3 miles and be in another school district. Del Marsh should know. He is zoned for Anniston City Schools, but he sent his children to Oxford City Schools. Del Marsh found the competition and utilized it.<br />
<br />
In Alabama, to move your family is much cheaper than attending a private school. Often, it is a $600 rent versus $800 rent.<br />
<br />
<b>Private Schools Can Discriminate</b><br />
<b><br /></b>
Unlike public schools, private schools can discriminate. This discrimination is not blatant, it is disparate. They do this with entrance exams and higher tuition. <br />
<br />
All types of entrance exams have been found to be <a href="http://www.nytimes.com/2012/09/28/nyregion/specialized-high-school-admissions-test-is-racially-discriminatory-complaint-says.html?_r=0">racially discriminatory</a>. Just like the "Alabama Accountability Act", the entrance exams seem simple at face value. Only when uncovering the statistical effects, does one realize the outcome.<br />
<br />
Let's do some math on the $3500 tax credit. The tax credit is in arrears. Any parent who wishes to send their child to private schools must first pay private school tuition for one year before receiving the tax credit.<br />
<br />
The price for tuition and fees at Shades Mountain Christian School is $4,695 / year for one student plus a $500 signup fee, plus a $95 book fee. Just to get started, we are talking about $5,290 / year. The closest public transit to the school is the 31 express bus on MAX. In research, this is the average cost of the average lower level private school.<br />
<br />
<a href="http://www.wbhm.org/News/2012/AvondaleIntegration">90% of Birmingham City Schools are students who received free and reduced lunch.</a> The free and reduced lunch program is based on the federal poverty levels, which is <a href="http://www.familiesusa.org/resources/tools-for-advocates/guides/federal-poverty-guidelines.html">$19,530 for a family of 3</a>. Since 90% of Birmingham City Schools students participate in free and reduced lunch, it is a fair assumption that the average family income for a Birmingham Student is around $19,530. Assuming a standard deviation of +- $15,000, a majority of families will make less than $35,000 / year. <b>It will not be possible for the average family to pay $1,500 up front to get started.</b><br />
<br />
Majority white private schools will remain majority white private schools.<br />
<div>
<h3>
<b>Consequences of the Bill</b></h3>
</div>
<div>
* Subpar private schools will spring up chasing $3,500 / student tax credit. Think for-profit colleges chasing federal govern backed student loans. These private schools will minimize costs and set a tuition cost of $3,500.</div>
<div>
<br /></div>
<div>
* An industry for subprime high school student loans will spring up. These industries will advance families $2,000 or $2,500 with a claim on the families $3,500 tax credit.</div>
<div>
<br /></div>
<div>
* Only people currently paying a private school bill will see a benefit. Everyone else will just incur more costs.</div>
<div>
<h3>
How to Improve Schools</h3>
<div>
* Set a clear mission for the Alabama School system. Teachers are trying to optimize for too many variables: college prep, paperwork, testing, teaching time, classroom time, etc. Instead of adding days, and adding responsibility -- simplify. Simplify the goal and simplify the process.<br />
<br />
* Moneyball metrics for schools. Schools have statistics on everything -- use them. Use the statistics to find kids who change patterns early. Use those statistics to intervene, and hold students accountable.<br />
<br />
* Put Superintendents back in the classroom for 7 hours per week. The unions are against this because it takes a teacher out of the class room, but who cares what the AEA says. Superintendents need to remember what teaching is like. Superintendents should be teachers first.<br />
<br />
* Measure teachers on the grades of their students for all courses the students take. Mrs. Frye told me: "There is not such thing as a math person and an English person. Anyone can do anything." Athletes are judged by a plus-minus differential while they are on the floor (i.e. when this athlete is on the floor, one with a positive differential means he increases leads). Measure teachers the same way for students across all of their courses. A math teacher should encourage English capabilities as much as math. Measure teachers on a plus-minus system across all their students in all subjects.</div>
</div>
Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-74680842492096295742013-01-17T16:30:00.002-06:002013-01-17T16:30:10.513-06:00Coffee Free for on Week -- Recovering AbuserI don't use the term "coffee abuser" lightly. Before, my recent hiatus, I was drinking a significant amount of coffee. The day before I quit, the best I could remember I had consumed 7 cups of coffee. But, it wasn't the caffeine I was after -- it was the ritual.<br />
<br />
I wasn't drinking drip coffee from filters. I was drinking the good stuff. French press and AeroPress with Primavera Coffee (<a href="http://primaveracoffee.com/">http://primaveracoffee.com/</a>). The Primavera Coffee Columbia blend was/is my favorite. I ground the beans, boiled the water, prepared the containers. I would do this multiple times day: before breakfast, breakfast, when I arrived at the office, around 10:30am, after lunch, and at night around 7pm. Then, there was another random coffee session or two. I felt like Bilbo Baggins.<br />
<br />
I had to quit cold turkey. I am not of the type who can just stop.<br />
<br />
<b>Day 1</b><br />
Consumed a copious amount of water -- about 1.5 gallons of water to relieve the need to have coffee. It was the hand to month habit that I had to fill. Eyes got heavy around 3pm.<br />
<br />
<b>Day 2 - 3</b><br />
Continued to consume an amazing amount of water. Began to have headaches that felt like someone pressing a 2x4 into the front of my brain.<br />
<br />
<b>Day 4 - 5</b><br />
Clarity to my brain returned. With the amount of coffee I was consuming, I had lost something, some productivity, some ability to focus and think. When I sat down at work the Monday after I quit, it was like my brain was fresher than it had been in a while.<br />
<br />
<b>Day 6</b><br />
Brain clarity continued. Refrained from coffee. Headaches were gone, and continued to drink water in quantity.<br />
<br />
<b>Day 7</b><br />
Reintroduced a small mid-afternoon coffee. Didn't finish it.<br />
<br />
The week without coffee was a reset on my body, my brain, and my habits. As a friend put it, "it wasn't that I was drinking coffee, my problem was I was drinking coffee excessively."<br />
<br />
<br />Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-62902985394865920792012-12-10T18:46:00.003-06:002012-12-10T18:46:54.059-06:00Personal E-mail PolicyI treat E-mail as a non-urgent, semi-important mode of communication. If you have urgent communication, please call me at: 205-924-3472. I respond to most email messages within 2 weeks. If you feel your E-mail message cannot wait 2 weeks, please wait a day, then call me.<br />
<br />
I do this because I am excessive unitasker. I am incapable of doing multiple things at once. I focus on singular problems, and I do that well. Most of the time, E-mail gets in my way of effectively working.<br />
<br />
If you just want to chat, please call me: 205-924-3472.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-31916340920359003422012-11-27T04:29:00.002-06:002012-11-27T06:31:52.527-06:00Must-Have Skills : "Productivity Improvements"?While cruising WSJ, I ran across an article "Must Have Job Skills in 2013." Written like a Horoscope, the skills listed could have applied for any year from 5 A.D. to 3000 A.D. However, the one that jumped off the page was "Productivity Improvement". I rallied around it because we judge employees on their productivity.<br />
<br />
In our knowledge-centric atmosphere of software, productivity isn't making widgets faster and moving the production line. Productivity is choosing the best of an ambiguous set of desired outputs. Achieving that output with minimal effort. Finally, minimizing future effort required to persist the output.<br />
<br />
Skills required for productivity are decision making and systems design. Assisting influencers are: understanding of the system and consumer and previously crafted tools to leap frog from.<br />
<br />
The more I thought of it, I doubted the ability of one individual to unilaterally affect the productivity of an organization. It must be a cultural, cumulative shift.<br />
<br />
<b>Improve Everyone's Decision Making Ability</b><br />
<b><br /></b>
Do you know how to achieve 100% productivity gains right now? Choose not to perform a non-productive task. Productivity gains in the US workforce haven't come because we've gotten better at doing. Productivity improved because companies have only enough workers to do important tasks. Fellow employees felt the pain of individuals not doing the most important tasks and corrected the person.<br />
<br />
Improving decision making in a corporation happens by answering the following question: <i>How can everyone in the company answer the question 'what should I do now?' with the correct answer quickly and with as little effort as possible?</i><br />
<br />
Isn't that the purpose of the business crap we learn about? Goals, visions, values. Give everyone a common target, and people and teams will self correct.<br />
<br />
<b>Understanding the System, Future of the System, and Consumer of the System</b><br />
<b><br /></b>
Edwards Demming emphasizes the idea of Systems Knowledge. He says, every action in a company has a person consuming the output of that action. The key to understanding what to do and quality of output is to understand the needs of that person who is accepting the output.<br />
<br />
YC alumni have the motto: "Make something people want." The depth of the motto is the lack of definition of product and the consumer. Something can mean actions, products, ideas, processes, art, performance, knowledge, or a life. People can mean end-consumers, direct-customers, sales team, support team, business owners, or spouses and families. "Make something people want" means different things to the consumer of the organization.<br />
<br />
To my wife, "make something people want" means "make [a life] that will be fulfilling for our values."<br />
<br />
To most of our customers, "make something people want" means "make a database platform that enables me to do what I do best."<br />
<br />
Brandon Mathis is the UI Expert at MongoHQ. He is a good designer, but he is amazing at understanding the consumers of our tool. He asks the overlooked questions that differentiate the output of our product.<br />
<br />
When designing and development for a system, the next visible step is not always the best step. Understanding the system allows you to take confident steps toward the best outcome. When designing a system, don't forget the hidden element of time: are you designing your system for current consumers or future consumers? Will your decision today stand the test in two months?<br />
<b><br /></b><b>Emphasis on Internal Tools and Rewarding Improvement</b><br />
<b><br /></b>
The US is individualistic. I am individualistic. I like to think my single action affected the output more than 50% so that I can claim ownership of the win.<br />
<br />
Corporations, by definition, are not individualistic. There are room for heroes, but the ability of people derives from the system are bound. Dysfunctional systems can kill the output of heroes. Well oiled systems enable super-human output from everyone.<br />
<br />
Building the culture of improvement and the tools for understanding a system isn't a phrase that sounds sexy and productive. Github, a company by which all young companies measure themselves, has made "internal tools" sexy. "Internal tools" for Github are:<br />
<br />
<ul>
<li>Dashboards that display previously unknown information that is concise, actionable</li>
<li>Improved communication tools that distribute knowledge to all employees</li>
<li>Scripts and code that turn a 30 minute task into something no human ever has to think about again</li>
</ul>
<br />
With the "internal tools", Github is optimizing output for every consumer in the organization. They are also building a culture of improvement.<br />
<br />
. . . I've re-read this post. It appears, I too have been as generic as a horoscope.<br />
<br />Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-11697661616749296072012-08-23T00:25:00.003-05:002012-08-23T09:02:53.398-05:00How to Commute on the Bus in Birmingham, AlabamaOver the past 2 weeks, I have been commuting in Birmingham on the bus. I've used it for a couple of pleasure trips and some business trips.<br />
<br />
My first trip was a Saturday exploratory trip. I live in Cahaba Heights, so I peddled my bicycle up the hill to the Summit. The 280 Limited Stop route leaves the Summit for downtown hourly weekdays at 20 minutes after every hour, and weekends at 40 minutes after every hour. There are two stops at the Summit, one on the road and one with a covered shelter. The first go of it, I didn't know about the covered shelter. When I showed up, I was glad to see others also waiting. It meant something was coming.<br />
<br />
My first trip started with the 2:41pm Inbound Saturday bus. The other two gentlemen waiting were employees from the shops at The Summit. I could tell by their attire, with logos of local companies. Honestly, on this trip, I was as fresh as it gets. I didn't know what was about to happen, and I had many questions on my mind:<br />
<br />
<ul>
<li>What am I going to do with my bike?</li>
<li>Will the bus get here sometime today?</li>
<li>How will I pay to ride the bus?</li>
<li>Where will I get off the bus? As the routes and stops are sparse on the website.</li>
</ul>
<div>
The guys at the bus stop answered a couple of my questions about fares and bikes.</div>
<div>
<br /></div>
<div>
As the bus arrived, I am sure I stuck out like a sore thumb to the other men waiting. I popped up like a jack-rabbit, grabbed by bike, and waited for the bus to navigate the final 200 yards. The other two men calmly let the bus meander.</div>
<div>
<br /></div>
<div>
I could see the bus had a bike rack on front. The bike rack was in the up position. Great! I had to figure out how to use this puppy. So, I just started pulling levers and finally found the silver bar that lowers the rack just after the bus driver rose from his seat to assist me. Then, I placed my bike on the rack and affixed the restraint to my bike.</div>
<div>
<br /></div>
<div>
Walked around, boarded the bus and it was packed--easily 25 people on the bus. Looking around, they were from the shops up and down 280 and they were heading back home.</div>
<div>
<br /></div>
<div>
The bus made it to Five Points South in just 12 minutes. I chose to get off the bus at Five Points South because I had no idea what I was doing. So, I got off the bus as Five Points. Then I rode my bicycle down the hill all the way to 2nd Avenue. I found Urban Standard and worked there until my outbound bus departed at 6:10pm.</div>
<div>
<br /></div>
<div>
I arrived at 5:55pm at the Central Station on 1st Avenue N. This time, bording the bus was old hat. My only surprise on the outbound bus was the number of stops in downtown before heading to The Summit. I learned the bus stops actually have bus route numbers on them, and those bus route numbers are important to navigation.</div>
<br />
<b><br /></b>
<b>Best thing about the bus?</b><br />
<b><br /></b>
First, let me get this out of the way: the bus is better than most people think.<br />
<br />
Secondly, it is different. I've started to feel good about the capability of someone to live in Birmingham without an automobile. As I'm riding the bus, I've realized I could leave my house, get on the bus, go to the downtown station, board an Amtrak train, and head to New Orleans or New England.<br />
<br />
Third, coldest air conditioning in the South. ~ 72 degrees.<br />
<b><br /></b>
<b>Worst thing about the Bus?</b><br />
<b><br /></b>
It is the bjcta.org website. It is impossible to read. Sometimes, it is impossible to know what is about to happen without having prior experience. To overcome this, you should take some exploratory trips.<br />
<b><br /></b>
<b>Why is the bus always empty?</b><br />
<b><br /></b>
The bus is empty when it is going to same way most of the cars are going. Generally speaking, the bus is full of people when it travels the opposite direction of rush hour traffic.<br />
<br />
One morning, I caught the 7:20am inbound bus at The Summit. The outbound bus was standing room only, with a full bike rack on the front.<br />
<b><br /></b>
<b>What are the must haves?</b><br />
<br />
<ul>
<li>$1.25 fare cash (dollar and a quarter)</li>
<li>General idea of where you want to travel (know some of the routes). iPhones wouldn't load the terrible Flash based maps on the bjcta.org site -- so you can't make adjustments easily while mobile.</li>
<li>Newspaper and a hat a-la Mad Men</li>
<li>(Optional) My bike has made it easy to get where I want to go. Also, it has made it easier to recover from boarding mistakes.</li>
</ul>
Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-24662367446720079492011-04-14T21:25:00.002-05:002011-04-15T06:59:41.576-05:00College Football Athletics: The Case for Unionization<div class="p1"><span class="s1"><b>Balance of Power</b></span><br />
<span class="s1"><b><br />
</b></span></div><div class="p2"><span class="s1"><b></b></span></div><div class="p1"><span class="s1">In college football, the only remaining amateur participant is the athlete. All other parties receive healthy compensations: coaches, administrators, TV deals, conference commissioners, athletic support staff, college presidents. The best interest for everyone, except the athlete, is a maintenance of status-quo. </span>The other parties are compensated only due to the risk and choices assumed by the student athlete.</div><div class="p2"><span class="s1"></span></div><div class="p1"><span class="s1"><br />
</span><br />
<span class="s1">The students have the least power: their image is sold, their bodies are used, and their time is required.</span><br />
<span class="s1"><br />
</span></div><div class="p2"><span class="s1"></span></div><div class="p1"><span class="s1"><b>Anti-Trust: Cannot Play NFL until 3 Years After High School</b></span><br />
<span class="s1"><b><br />
</b></span></div><div class="p2"><span class="s1"></span></div><div class="p1"><span class="s1">For three years of a players life, end of high school to NFL eligibility, universities in the United States are a football monopoly. College football is the only opportunity for advancement for student athletes -- it is <i>the</i> path. It is essentially required for student athletes to put their bodies at risk for sub-par compensation.</span></div><div class="p2"><span class="s1"></span></div><div class="p1"><span class="s1"><br />
</span><br />
<span class="s1">If the NFL allowed students to enter the NFL draft out of high school, this anti-trust question would be insignificant. However, the 3-year rule appears to be a back-room handshake among college administrators and the NFL. Colleges receive cash flows from the athletics for 3 years, and the NFL can mitigate the risk of paying a high school senior millions of dollars.</span></div><div class="p2"><span class="s1"></span></div><div class="p1"><span class="s1"><b><br />
</b></span><br />
<span class="s1"><b>The Only Way Out of Current Predicament</b></span></div><div class="p2"><span class="s1"><b></b></span></div><div class="p1"><span class="s1"><br />
</span><br />
<span class="s1">What are the moral obligations universities have to their most productive revenue streams:</span></div><ul><li class="li1"><span class="s1">Athletes receive nominal compensation compared to the athletic revenue: $100 million in revenue for the the top institutions, and their athlete compensation is negligible.</span></li>
<li class="li1"><span class="s1">Athletes in marketable sports are spending massive amounts of time chasing an opportunity to show themselves worthy to play professional sports: practice, weight lifting, practice, training. These activities do not often translate into employable skills in other disciplines.</span></li>
<li class="li1"><span class="s1">Body damage: concussions and other injuries. What is the long-term cost of a concussion? What about future income lost because of a concussion? What about quality of life? Given more information on concussions, do institutions have obligations to protect the student for the long term?</span></li>
</ul><div class="p1"><span class="s1">Largely, I believe unions are detrimental to industries. However, when the balance of power between employers and employees are as skewed as college athletics: a strong athletic union is the only way to restore the balance and fairly compensate all parties.</span></div>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-14601807331933324132011-02-22T05:54:00.000-06:002011-02-22T05:54:32.272-06:00SendGrid PricingWe use SendGrid to send thousands of E-mails per day, and they make it easy. Our bill has steadily increased. Our question, was: "Given SendGrid's pricing, when do we need to upgrade?" By the way, SendGrid does have a simple calculator on their "<a href="http://sendgrid.com/pricing.html">Product Pricing</a>" page. The table below should help you answer that question.<br />
<br />
<table align="center" border="1" cellpadding="2"><thead>
<tr><td></td><td>$ / Month</td><td># of Credits</td><td>Marginal $</td><td>Breakeven Point</td></tr>
</thead><tbody>
<tr><td>Basic</td><td>9.95</td><td>10000</td><td>0.00100</td><td>170000</td></tr>
<tr><td>Silver</td><td>79.95</td><td>50000</td><td>0.00075</td><td>430000</td></tr>
<tr><td>Gold</td><td>199.95</td><td>100000</td><td>0.00050</td><td>500000</td></tr>
<tr><td>Platinum</td><td>399.95</td><td>500000</td><td>0.00045</td><td></td></tr>
</tbody></table>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-58944209891251558452010-12-26T09:54:00.004-06:002012-04-25T21:58:43.552-05:00You are Beautiful Birmingham<div class="MsoNormal">
Birmingham Metro must change the focus from <i>ME</i> to <i>WE</i>. Fragmented geopolitical segmentation of the Birmingham Metropolitan (Metro) will continue to produce squabble. History of the area guarantees this is the most likely outcome. The basis of the separation is a lack of trust: centuries of dishonesty between races and political factions created barriers more real than municipal lines. Birmingham Metro is composed of varying entities representing a balance of power, which is proven to fail all parties. We should build a larger ideal; we are on the same team; we are Birmingham; you are Birmingham.<br />
<h4>
Who are you competing against?</h4>
</div>
<div class="MsoNormal">
Birmingham city is not competing against Hoover. Mountain Brook is not competing against Vestavia. Hoover is not competing against Birmingham city. Consider the Southeastern Conference: teams share half of their bowl payouts with the conference. The conference collectively bargains for TV viewing rights. The SEC separates their competition on the field as being the product, and the cooperation off the field as their livelihood. It is in Alabama’s best interest to have a strong Auburn (and vis-à-vis). It is in Birmingham’s best interest to have a strong Hoover. It is in Mountain Brook’s best interest to have a strong Birmingham. Our competition is Nashville, Atlanta, Indy, and Austin, not each other.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
In a Leadership and Creativity class lead by the late Dr. Paul Preston at Montevallo, we performed an exercise on negotiation and cooperation: in groups of two, we were told to negotiate with counterparty for the best price on oranges. Our primary goal was for the best price, but hidden within our instructions were our needs: one needed the juice and the other needed the rind. The counterparties could only discover potential cooperation with discussion and <i style="mso-bidi-font-style: normal;">showing their cards</i>. Elements of vulnerability were required for the greatest outcome. Of the 20 counterparty pairs, only one group found the differing needs – therefore, the best outcome is elusive, requires vulnerability, and creativity.<br />
<h4 id='education'>Education in Birmingham</h4>
</div>
<div class="MsoNormal">
In Birmingham, the “third rail” is education. It will provide the power for change, yet will be divisive. I consider each school system in Birmingham to be a private system. My reasoning: school performance is directly associated with per-capita income from the surrounding tax base. Instead of directly paying tuition, individuals purchase land within the tax base, then pay the tuition (i.e. property tax), or create a education foundation (which should be dissolved). I know the caveats around my thought: each system has decided their emphasis and allocation of resources. It remains: people with children purchase land associated with school systems; the land represents a share in a school system just as a shareholder purchases shares in corporation.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Whether you agree with my <i style="mso-bidi-font-style: normal;">Private School Theory</i>, you have to agree it is in each municipality’s best interest to have smarter people in neighboring areas. Certain areas of Birmingham have core competencies in education. Certain areas have created vicious cycles. For business, for the future, it is in each person’s best interest to have better education systems. Mountain Brook, Hoover, and Vestavia need to exploit their core competencies in education and bring up the City system. The City system needs to understand its misallocation of resources, and accept guidance from those better at performing the task.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Because each city in Birmingham has the right to manage resources differently, we can think of them as different economies. Each city has differing <i style="mso-bidi-font-style: normal;">cash flows</i>, similar to countries. Birmingham is a net importer: it pays for experienced human resources to come into the city. Mountain Brooke and Vestavia are net exporters: they provide experienced human resources to other areas. Viewing cash flows this way, the Birmingham occupational tax is a tariff on importing human resources. Birmingham has to import because its school system is deficient. Yet, the core competency for Birmingham city is business.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Each part of Metro Birmingham has a core competency, which if explored like juice and rind would make the whole work better. It will take vulnerability, creativity, and breaking down the history of mistrust. You are Birmingham.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
We need to begin building our educational, business, and government infrastructure to ensure we are on par in the future.</div>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-48515879348447918872010-11-18T15:16:00.001-06:002010-12-02T22:50:42.973-06:00Reading Excel files using JRuby and Apache POIIn the code below, I am reading Microsoft Excel files using JRuby and the Apache POI library. You will need the following, which you can get from http://apache.org/:<br />
<br />
<br />
<ul><li>commons-logging-1.1.jar</li>
<li>dom4j-1.6.1.jar</li>
<li>geronimo-stax-api_1.0_spec-1.0.jar</li>
<li>junit-3.8.1.jar</li>
<li>log4j-1.2.13.jar</li>
<li>poi-3.6-20091214.jar</li>
<li>poi-contrib-3.6-20091214.jar</li>
<li>poi-examples-3.6-20091214.jar</li>
<li>poi-ooxml-3.6-20091214.jar</li>
<li>poi-ooxml-schemas-3.6-20091214.jar</li>
<li>poi-scratchpad-3.6-20091214.jar</li>
<li>xmlbeans-2.3.0.jar</li>
</ul><br />
<div>I don't remember which ones I used, but those are the ones which were in the library when it worked. According to the code below, you will want to put those in "lib/java_classes." However, you can put them wherever.</div><div><br />
</div><div>The code below outputs the Excel spreadsheet as an array:</div><div><br />
</div><div style="background: #dddddd; border: 1px solid #333333; font-size: 10px; padding: 15px;"><pre>Dir.new("lib/java_classes").sort.each do | file |
require("lib/java_classes/" + file) if file =~ /\.jar$/
end
include_class Java::org.apache.poi.poifs.filesystem.POIFSFileSystem
include_class Java::org.apache.poi.poifs.filesystem.POIFSFileSystem
include_class Java::java.io.ByteArrayOutputStream
include_class Java::java.util.Date
require 'yaml'
args = YAML::load(STDIN)
input = Java::JavaIo::FileInputStream.new(args["file"])
include_class Java::org.apache.poi.ss.usermodel.WorkbookFactory
include_class Java::org.apache.poi.ss.usermodel.Workbook
include_class Java::org.apache.poi.ss.usermodel.Sheet
include_class Java::org.apache.poi.ss.usermodel.Row
include_class Java::org.apache.poi.ss.usermodel.Cell
include_class Java::org.apache.poi.ss.usermodel.FormulaEvaluator
@spreadsheet = WorkbookFactory.create(input)
@formula_evaluator = @spreadsheet.get_creation_helper.create_formula_evaluator
def parse_value(cell)
return nil if cell.nil?
case cell.get_cell_type
when Cell.CELL_TYPE_NUMERIC then cell.get_numeric_cell_value
when Cell.CELL_TYPE_STRING then cell.get_string_cell_value
when Cell.CELL_TYPE_FORMULA then parse_formula(@formula_evaluator.evaluate(cell))
when Cell.CELL_TYPE_BOOLEAN then cell.get_boolean_cell_value
when Cell.CELL_TYPE_BLANK then nil
else
raise "Don't know what to do with cell type: #{cell.get_cell_type}"
end
end
def parse_formula(cell_value)
case cell_value.get_cell_type
when Cell.CELL_TYPE_NUMERIC then cell_value.get_number_value
when Cell.CELL_TYPE_STRING then cell_value.get_string_value
when Cell.CELL_TYPE_BOOLEAN then cell_value.get_boolean_value
when Cell.CELL_TYPE_BLANK then nil
else
raise "Don't know what to do with cell type: #{cell_value.get_cell_type}"
end
end
spreadsheet_as_array = (0..@spreadsheet.get_number_of_sheets - 1).map do | sheet_num |
sheet = @spreadsheet.sheet_at(sheet_num)
sheet_as_array = [sheet.sheet_name, []]
sheet.row_iterator.each do | row |
sheet_as_array[1] << []
row.cell_iterator.each do | cell |
sheet_as_array[1].last << parse_value(cell)
end
end
sheet_as_array
end
puts spreadsheet_as_array.inspect
</pre></div><br />
There is a flaw to this code above: an Excel sheet needs to be "cleaned" prior to importing. Excel files typically get tons of extra rows and tons of extra columns associated with the Active Cells. People apply formatting to unused areas by selecting all, etc. Therefore, go in and delete unused cells, and do "Save As" to get Excel to forget formatting on those cells.<br />
<br />
To run the code above, do the following:<br />
<br />
<div style="background: #dddddd; border: 1px solid #333333; font-size: 10px; padding: 15px;"><pre>echo 'file: my_spreadsheet.xls' | jruby xls_to_array.rb</pre></div>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-11504609809195451512010-11-18T10:49:00.004-06:002010-11-20T08:57:58.557-06:00Statistically Improbable CheatingI recently ran across an article on finding test cheaters with statistics(h<a href="ttp://www.telegraph.co.uk/news/newsvideo/weirdnewsvideo/8140456/200-students-admit-cheating-after-professors-online-rant.html">ttp://www.telegraph.co.uk/news/newsvideo/weirdnewsvideo/8140456/200-students-admit-cheating-after-professors-online-rant.html</a>), and I remembered an event I had when I was a teacher. Then, I recovered this from a message on 03/16/2005 when I was a teacher:<br />
<br />
<i>I had my students a test recently that contained 65 multiple choice questions. Also, I had a student tell me my class was easy, so I considered that a challenge to whoop the students with the next test.</i><br />
<i>So students are taking the test (which I give on computers, and it grades automagically) and the grades are coming back between 40's and 65's. Then some more classes come in and they start making between </i><i>40's and 80's. So the final average average is about 55. There is a good equal distribution so I can work with it.</i><br />
<i><br />
</i><br />
<i>I start figuring out how I am going to scale the test (and in public schools they frown on true Bell Curves. They are really looking for a line with about 5% failing and 30% A's. ). So I do some computer stuff and figure that I will split the hardest questions from the easiest on a scale with 5 steps. The hardest are worth 1.8 and the easiest are worth 2.2. That gives me a good line, and theoretically removes any </i><i>bonuses for guessing correctly.</i><br />
<i><br />
</i><br />
<i>So, I get this knocked out. Finally I decided to write a little script to see if anyone is cheating. I examine everyone's answers, and the odds of two people having 60 of 65 of the same answers on the test is highly unlikely. Seeing how most only got 55% correct, correlations between two different test-takers should not be there.</i><br />
<i><br />
</i><br />
<i>After I run this script, I get 4 sets of students that have 60 similar answers. 3 of the 4 sets sit right next to each other. 1 of the 4 sets has one student that sits directly behind the other. There are no other correlations.</i><br />
<i><br />
</i><br />
<i>Convenient huh?</i><br />
<i><br />
</i><br />
<i>The odds of two students out 100 that are in of five classes sitting directly next to each other randomly putting the same answers for 60 of 65 four choice multiple questions the exact same is .00064%.</i><br />
<i><br />
</i><br />
<i>I think it was just brain waves interfering.</i>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-34169861573947497742010-11-17T08:43:00.000-06:002010-11-17T08:43:06.892-06:00Using Math with Ruby RangesBack in August, I wrote a little Ruby library that extends math functions to ranges (<a href="https://github.com/Winslett/RubyRanges">https://github.com/Winslett/RubyRanges</a>). The sole purpose of the library was to easily work with schedules and conflicts.<br />
<br />
For instance, given I am available from 2 to 6, yet have scheduled events at 3 to 4 and 4:30 to 5:15, I could use simple math functions like the following:<br />
<br />
<div style='padding: 15px; border: #333333; background: #dddddd;'><pre> (2010-11-17 14:00:00..2010-11-17 18:00:00) - (2010-11-17 15:00:00..2010-11-17 16:00:00) - (2010-11-17 16:30:00..2010-11-17 17:15:00)
</pre></div><br />
Should equal an array of ranges of times the person is available:<br />
<br />
<div style='padding: 15px; border: #333333; background: #dddddd;'><pre> [(2010-11-17 14:00:00..2010-11-17 15:00:00),(2010-11-17 16:00:00..2010-11-17 16:30:00),(2010-11-17 17:15:00..2010-11-17 18:00:00)]
</pre></div><br />
Please take the library. I look to convert it into a Gem soon, but job comes first.<br />
<br />
ChrisChrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-20584601560739804612010-11-16T03:50:00.006-06:002010-11-16T03:55:06.549-06:00Automating Microsoft Word with IronRubyBelow some snippets with details of a project I worked on for documentation creation workflow. A core focus of the project was reduce the number of steps needed by a person to automate a document creation and distribution process.<br />
<div><br />
</div><div>At the basis of the organizational knowledge is Microsoft Word and Excel, therefore, we stuck with Microsoft Word and Excel. Given I introduced more base technology, I would have to support more base technology. Therefore, I tried to minimize change and maximize return-on-technology.</div><div><br />
</div><div>Each document was a mail merge file in Microsoft Word. Each mail merged document had multiple receipts, and the routing and packaging of documents could be either physical or E-mail. The physical distribution had a variable number of copies based on receipts, and the E-mail distribution had a single copy with a variable number of recipients.</div><div><br />
</div><div>Now for the code:<br />
<br />
Below loads the information into IronRuby:</div><div style="background: #dddddd; border: 1px solid #333333; padding: 15px; overflow-x: scroll;"><div style='display: block'><pre>require 'Microsoft.Office.Interop.Word, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'</pre></div></div><div><br />
Below I abstracted the Microsoft Word interface:</div><div style="background: #dddddd; border: 1px solid #333333; padding: 15px; overflow-x: scroll;"><pre style='width: 500px'>class Word
attr_accessor :word, :documents
def self.connect
word = Word.new
word.word = System::Runtime::InteropServices::Marshal.get_active_object("Word.Application")
word.documents = (1..word.word.Documents.Count).inject([]) do | documents, num |
documents && Document.new(:document => word.word.Documents[num])
end
word
end
def self.open
word = Word.new
word.word = Microsoft::Office::Interop::Word::ApplicationClass.new
word.visible
word.documents = []
word
end
def visible
word.visible = true
end
def close(args = {})
args[:force] ||= false
word.Quit(args[:force])
end
def printers
System::Drawing::Printing::PrinterSettings.InstalledPrinters.map { | p | p }
end
def active_printer
word.ActivePrinter
end
def active_printer=(arg)
word.ActivePrinter = arg
end
def disable_alerts
word.DisplayAlerts = Microsoft::Office::Interop::Word::WdAlertLevel::wdAlertsNone
end
def enable_alerts
word.DisplayAlerts = Microsoft::Office::Interop::Word::WdAlertLevel::wdAlertsAll
end
end</pre></div><br />
Below is the Document object. While working, I originally started with Document controlling the Word and Document objects, but eventually realized I needed to split the two:<br />
<br />
<div style="background: #dddddd; border: 1px solid #333333; padding: 15px; overflow-x: scroll;"><pre>class Document
attr_accessor :document
def initialize(args = {})
self.document = args[:document]
end
def name
document.Name
end
def ToString
name
end
def self.find(*args)
@@word ||= Word.connect
case
when args[0].is_a?(Fixnum) then
@@word.documents[args[0]] || raise(WordErrors::DocumentNotFound, args.inspect)
when args[0].is_a?(String) then
@@word.documents.find { | document | document.name == args[0] } || raise(WordErrors::DocumentNotFound, args.inspect)
when args[0] == :all then
@@word.documents
else
raise(WordErrors::DocumentNotFound, args.inspect)
end
end
def self.open(file_path = nil)
@@word ||= Word.open
document = Document.new(
:document => !file_path.nil? ?
@@word.word.Documents.Open(System::String.new(file_path)) : @@word.word.Documents.Add
)
@@word.documents << document
document
end
def mailmerge?
document.MailMerge.State != 0
end
def close(args)
save_changes = args[:force] ? false : true
@@word.documents.delete(self)
document.Close(save_changes)
if @@word.documents.length == 0
@@word.close(:force => true)
@@word = nil
end
end
#
# record => Fixnum, :first, :last, :previous, :next, [Fixnums]
#
def goto(record)
return true if record == :current || current_record == record
case
when record.is_a?(Fixnum)
document.MailMerge.DataSource.ActiveRecord = record
when record == :last
document.MailMerge.DataSource.ActiveRecord = record_count
when record == :first
document.MailMerge.DataSource.ActiveRecord = 1
when record == :next
document.MailMerge.DataSource.ActiveRecord = current_record + 1
when record == :previous
document.MailMerge.DataSource.ActiveRecord = current_record - 1
else
raise(WordErrors::RecordNotFound, "Cannot use '#{record}' to find a record")
end
rescue
raise WordErrors::NotMailMerge unless mailmerge?
end
#
# Expects the following variables to be passed:
#
# action => [:print, :save]
#
# args =>
#
# :records => [:all, :current, :next, :previous, :first, :last]
# :path => path to the directory which will save the files
# :directory_formula => The formula for the directory based on the
# Investors datasource values '#{Inv} - #{Investor}'
# :name => The file name you wish to give the document
#
#
def export(action, args)
set_action(action)
if args[:records] == :all
1.upto(record_count) do | record |
export(action, args.merge(:records => record))
@@word.word.ActiveDocument.Close(0)
end
else # For all other possibilities
goto(args[:records])
export_current
save(args) if action == :save
Document.new(:document => @@word.word.ActiveDocument)
end
end
def save(args)
location = create_directory(args[:path], args[:directory_formula])
url = System::String.new(File.windows_join(location, args[:name]))
puts "Saving: #{url}"
case
when args[:name].downcase =~ /\.pdf$/ then save_as_pdf(url)
when args[:name].downcase =~ /\.doc$/ then save_as_doc(url)
else
raise "Don't know how to save: #{location}"
end
rescue Exception => e
raise WordErrors::CouldNotSave, "Error saving to #{location}\\#{args[:name]}", [e.to_s] + e.backtrace
end
#
# Holder for an array of all the data fields in the DataSource
#
def data_fields
@data_fields ||= return_data_fields
end
#
# Returns the number of records in a DataSource
#
def record_count
@document.MailMerge.DataSource.RecordCount
end
#
# Returns the Row Value for a Particular Column of the
# DataSource
def field_value(index)
index = data_fields.index(index) + 1 if index.is_a?(String)
@document.MailMerge.DataSource.DataFields(index).Value
rescue
raise WordErrors::NotMailMerge unless mailmerge?
end
#
# Pass in a formula for fields and it finds and replaces the fields
#
def replace_fields_with_values(formula)
while formula =~ /\#\{([^\}]+)\}/ do
replaced_string = $&
escaped_string = field_value($1)
formula.gsub!(replaced_string, escaped_string)
end
formula
end
def save_as_pdf(url)
@@word.word.ActiveDocument.ExportAsFixedFormat(url, Microsoft::Office::Interop::Word::WdExportFormat::wdExportFormatPDF)
end
def print(args = {})
copies = args[:copies] ? args[:copies].to_i : 1
document.PrintOut(false)
end
private
#
# Creates the Directory to the current record based on the
# path created by the directory formula
#
def create_directory(path, dir_formula)
dir_name = directory_name_from_formula(dir_formula)
dir_path = File.windows_join(path, dir_name)
FileUtils.mkdir_p(dir_path) unless File.exists?(dir_path)
dir_path
end
#
# actions = [:save, :print]
#
def set_action(action)
document.MailMerge.Destination = case
when action == :print then 1
when action == :save then 0
else
raise WordErrors::InvalidAction, action
end
end
#
# Performs the current action as setup by other variables.
# Including set_action. This action will only be used with
# the :save action, since print automatically prints records
#
def export_current
document.MailMerge.DataSource.FirstRecord = current_record
document.MailMerge.DataSource.LastRecord = current_record
document.MailMerge.Execute(false) # false is whether to "Pause"
end
#
# Generates a name for the directory based on the values from
# the record and a formula given by the user
#
def directory_name_from_formula(dir_formula)
dir_name = dir_formula.clone
replace_fields_with_values(dir_name).gsub(/[^A-Za-z0-9\ \-\+\.\,]+/, "-")[0..64].strip
end
#
# Returns an array of all the data fields in the DataSource
def return_data_fields
@data_fields = []
1.upto(@document.MailMerge.DataSource.DataFields.Count) do | i |
@data_fields << @document.MailMerge.DataSource.DataFields.Item(i).Name.strip
end
@data_fields
end
#
# Returns the numeric value of the ActiveRecord
#
def current_record
document.MailMerge.DataSource.ActiveRecord
end
def save_as_doc(url)
@@word.word.ActiveDocument.SaveAs(url)
end
end</pre>
</div><br />
Working to scrub the data of any domain specific content, then I'll post the full code. If you have any questions, please E-mail me, and I'll answer them.<br />
<br />
ChrisChrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-69479828893656666442010-10-27T13:22:00.003-05:002010-11-06T21:48:10.222-05:00T-Mobile's New G2 and Why You Should Know Math / FinanceI was looking for my wife a new cell phone, and ran across a math / finance problem. Look at this screen shot:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_bMXctvvNO78/TMf6O7deB9I/AAAAAAAACNY/uOumGN7u8Lc/s1600/tmobile_g2_pricing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="http://4.bp.blogspot.com/_bMXctvvNO78/TMf6O7deB9I/AAAAAAAACNY/uOumGN7u8Lc/s400/tmobile_g2_pricing.png" width="395" /></a></div><br />
For a math professor, like <a href="http://blog.mrmeyer.com/">Dan Myer</a>, it has all the information that is needed. It poses questions, many of them:<br />
<ul><li>Which plan is cheapest?</li>
<li>When does the 500 minutes plan become more expensive than the 1000 minutes plan?</li>
<li>Should I purchase the phone for $499 or $199 given the change to the plan values?</li>
<li>Is there another carrier who is cheaper?</li>
<li>. . .</li>
</ul><div>The question I am going to deal with is, "Should I purchase the phone for $499 or $199 given the change in the in the plan values?" For this experiment, I am going to use the Unlimited Minutes to test.<br />
<br />
$499 + 79.99 * 24 is less than $199 + 99.99 * 24. Therefore, I should purchase the phone outright on a math basis.<br />
<br />
Given you could invest the difference at 2%, the differing NPV's are about $170 difference. You're cost of capital for the contract is about 9% between the two plans. The cost of capital is a differential IRR equation. $-300 now, but $20 more per month over the next 24 months, which equates to 9%.<br />
<br />
This figuring doesn't include the taxes and fees, which would presumably be higher on the $99.99 / month plan than the $79.99 / month plan. Giving even more lee-way to purchasing the phone in the beginning.</div>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-3233153489988490672010-10-25T14:25:00.000-05:002010-10-25T14:25:17.779-05:00Why Top Students Don't Want to TeachHarvard Business Review recently sent out their "The Daily Stat" with the headline "Why Top Students Don't Want to Teach." Of, course . . . I was hooked. What amazes me is the difference between the questions "I would be proud to tell people I had this job" and "People in this job are considered successful": 60% versus 38%. To me, they are the same questions. "I would be proud to tell people I had this job" has a "correct" answer. The correct answer is "yes." "People in this job are considered successful" externalizes the question, and you get more honesty.<br />
<br />
The teaching profession has a large public opinion gap to overcome. When I was a teacher, I was told multiple times "I can't believe you are a teacher." Have fun with the results:<br />
<br />
<div style="text-align: center;"><img src="http://hbr.s3.amazonaws.com/image/stat/20101025-top-talent.jpg" /></div><br />
http://link.email.hbr.org/r/QTSN/74I53/MSL8ID/XJ4N9/NBOSH/U1/hChrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-67195356707440648982010-09-05T15:39:00.000-05:002010-09-05T15:39:51.504-05:00What do Students Need?<div class="separator" style="clear: both; text-align: center;"><a href="http://upload.wikimedia.org/wikipedia/commons/6/60/Maslow%27s_Hierarchy_of_Needs.svg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="240" src="http://upload.wikimedia.org/wikipedia/commons/6/60/Maslow%27s_Hierarchy_of_Needs.svg" width="320" /></a></div>At any moment in a young person's life, he has something to talk about. Being around young people is a study of Maslow's Hierarchy of Needs. At any one point, a student needs to talk about items from many points allow the spectrum.<br />
<br />
He could talk about friendship dynamics, school challenges, participation, pending life decisions, college, etc. Many students at all socioeconomic levels struggle with the lowest of food, shelter, safety, and power. Above are some "Leave it to Beaver" items higher in Maslow's Hierarchy of Needs.<br />
<br />
Ironically, students have the least access to individuals whom they trust. They can't talk to friends, or they may be made fun of. They can't talk to parents, they are often enforcers of discipline. They can't talk to church leaders because they will be sent to Hell. As many questions and needs as students have, they don't have confidants. Just as adults and business leaders need confidants, young people need people they can trust.<br />
<br />
Students need confidants. Productive confidants are parents, grand-parents, teachers, advisors, or older siblings. Dangerous confidants are manipulative factions: other students, gangs, and mass-media. If students do have access to good information, they will find the closest information.<br />
<br />
As a teacher, my core belief is: At any time, a student has something to talk about. I gave time for students and listened. When I left teaching, I realized: At any time, <i>everyone</i> has something to talk about. Adults have compartmentalized these "things to talk about."Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-7406615528696538972010-08-27T21:34:00.001-05:002010-09-05T06:25:43.963-05:00Asymetrical Information, Football, and a Rain ShowerHudson and I arrived home from the Mountain Brook v. Shades Valley high school football game. We were the only people at the game who were mostly dry. The rest were soaked by a short rain shower during halftime. How did we make it safely, and the others did not? I'll explain it with the financial concepts of "imperfect information" and "asymmetrical information."<br />
<br />
<b>Setting</b><br />
<b><br />
</b><br />
The game was turning into a blow out; Mountain Brook has a star receiver (#7) and a pretty good QB. Shades Valley has a stud running back, but the offensive line couldn't block the eight people the defense rushed each play. Hudson and I arrived with half the first quarter remaining.<br />
<br />
By the time we arrived, the parking lot was full. There were easily 3500 people in the stadium. In financial terms, 3500 people were "long" the football game. Of the people there, I saw one umbrella. 1 of 3500 people hedged the chance of rain. Everyone else relied on wit and intuition to avert rain.<br />
<br />
<b>The Information</b><br />
<b><br />
</b><br />
<b><span class="Apple-style-span" style="font-weight: normal;">Shortly after we arrive, I notice there are no stars or moon in the sky. The light from the football game bounced off the clouds. Using my new purchased smart phone, I downloaded "The Weather Channel" application. Compared to everyone else in the stadium, I held "asymmetrical information."</span></b><br />
<b><span class="Apple-style-span" style="font-weight: normal;"><br />
</span></b><br />
<b><span class="Apple-style-span" style="font-weight: normal;">I had more information than my present environment. From the information, I determined: it might rain and if it did rain, it would be a small-short rain shower. Everyone held "imperfect information." Without knowledge of the larger environment, they only knew it might rain. Once it began raining, all they knew was "it is raining." The masses couldn't make a decision to stay or go, run to the car, or find quick shelter. Even if they made the right choice, it was with incomplete information.</span></b><br />
<br />
<b>My Decision</b><br />
<b><br />
</b><br />
When the first rain drop hit my nose, I picked up Hudson and walked out. I was the first person to walk out the gate. Drops were falling sparsely. I looked behind me to see 20 people following. The other 3478 were betting on a few drops.<br />
<br />
When I found the first good shelter, Hudson and I stopped. It was the guard shack at Mountain Brook High School. The guard shack would max out at 20 occupants. As Hudson and I stopped, the rain picked up. One lady with her son stopped, I told them "It will only be a couple of minutes."<br />
<br />
As with markets, when the masses are long the football game and without hedges, there is only so much shelter available. Had I bet on rain and it not rain, I would have missed the the half time. My cost would have been the minutes I waited for it to rain. That was the cost of my hedge.<br />
<br />
We waited.<br />
<b><br />
</b><br />
<b>Their Decisions</b><br />
<b><br />
</b><br />
The 3478 people at the football game did not make decisions until realizing, shortly, they would be uncomfortable. Rain fell faster; not considered a soaking rain, it was a dowsing rain. Everyone else knew "it is raining." Everyone else made decisions based on the uncomfortable rain and the decisions others made. Shelters were full, under the trees was beginning to soak, and most people were running to their cars.<br />
<br />
Everyone was making the best decision with the information he had.<br />
<b><br />
</b><br />
<b>Similarity to 2008</b><br />
<b><br />
</b><br />
Beginning in 2005, certain people looked outside the bull market, i.e. the football game. They began making their decision to leave the market. They figure out how to short the market. At the football game, these people would have brought umbrellas and sold them during the rain storm. No one was that prepared.<br />
<br />
In late 2007, other individuals began leaving the market. They had seen the future, and had made a decision based on risk. That was me.<br />
<br />
In September and October 2008, that was the other 3478 people in the stadium. Shelters were full with the early movers. These individuals had two options: go to their car (sell and leave) or wait it out (take the pain).<br />
<b><br />
</b><br />
<b>Could I Have Sounded the Horn</b><br />
<b><br />
</b><br />
Just because I was dry, doesn't mean I will always be dry. Just because others were wet doesn't mean they will always get wet. My information could have been incorrect. Meteorologist (read professionals) see the same information I saw, and get it wrong 50% of the time. I could have lost the cost of my hedge (i.e. the time to run to the guard shack).<br />
<br />
Why didn't I tell everyone it was about to rain? Correct decisions always look more correct when looking at them from the future. Wrong decisions look like they could have been averted.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0tag:blogger.com,1999:blog-4723658433860404694.post-60065970925725662182010-08-26T10:07:00.000-05:002010-08-26T10:07:41.673-05:00Few Things are Better Than Running with my SonFor the last 3 weeks, I have made it a point to run more often. After the 3rd time running the first week, Hudson said "I going." I pulled out the jogging stroller and we ran.<div><br />
</div><div>He asked me questions about smaller objects we would pass in cars without noticing. In the morning, we talk about the beauty in the sky. I've taken him to an overlook near our house and looked at the rolling hills. He points out dogs, leaves, birds, cars, and drains.</div><div><br />
</div><div>This morning, we ran to a local park to have breakfast: apples and yogurt. He insisted on doing push-ups with me. I drew an awkward cat; he drew a good looking ant, including dirt. I played "Firehouse" with him. We sprayed out fires. Afterwards, I asked him if we should go look for victims. He said, "They are at the victim store." Once we got to the play structure that was "the victim store," he proclaimed "they have so many victims."</div><div><br />
</div><div>He and I have done different events together, and we get in streaks of fun. Well run for a couple more months until it is too cold to run outside. Then, we'll find another streak of fun.</div>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-59345408093399012010-08-25T07:58:00.000-05:002010-08-25T07:58:00.914-05:00Ah. . .the Start-upWhen people ask what's it like to be at a startup, I give them a metaphore.<br />
<br />
<i>At my previous job, I was given a coloring book. It was my responsibility to draw between the lines. Everything between the lines was my responsibility. I could make it however I liked, but I had definite limits. If I messed up on one page, we had the resources to turn the page.</i><br />
<i><br />
</i><br />
<i>At the startup, I have a blank canvas. Should I mess up the canvas, we don't have the resources to purchase another. But, should we not complete the canvas as to fulfill the market demand, we will be defeated by competition.</i><br />
<i><br />
</i><br />
This week, John Mauldin wrote "<a href="http://www.investorsinsight.com/blogs/john_mauldins_outside_the_box/archive/2010/08/23/the-importance-of-start-ups.aspx">The Importance of Start-ups</a>." He spoke about the statistics of job creation and innovation. I am more interested in the "Why." What are the motivational factors associated with startups?<br />
<br />
<b>Human Capital Input</b><br />
<br />
At a corporation, my individual contribution was unseen because I was apart of a whole. My role within the organization was largely unseen from the whole. Or, my poor performance could be subsidized by a better employee. At a corporation of 1000, I am 0.1% of the corporate human capital input.<br />
<br />
At a start-up of 8 people I am 12.5% of the corporate human capital input. Therefore, waste in that 12.5% is seen quickly. One person failing at a start-up will cause a noticeable failure.<br />
<i><br />
</i><br />
<b>Urgency</b><br />
<b><br />
</b><br />
Ever seen <u>Lord of the Rings</u>? Start-ups are Frodo, corporations are the Eye of Soromon (not in a good v. evil sense, but due to power and resources). The start-up runs quickly gathering customers without attracting the gaze of the corporation. However, certain actions a start-up takes runs the risk of attracting the attention of the larger corporation. This hyper competition felt by start-up causes them to run fast and even at night.<br />
<br />
<b>Individual Urgency</b><br />
<b><br />
</b><br />
Nothing motivates the individual like the statement "If I don't perform, I won't be here next year." The company may be here, the technology may be here, but I won't.<br />
<br />
<b>Hyper Capitalism</b><br />
<b><br />
</b><br />
A start-up is capitalism at it's core. A new company must perform all business functions to the level required, no more, no less. If the company wastes resources, it will be gone. If the company doesn't attract customers, it's gone.<br />
<br />
It is capitalism at it's finest.<br />
<i><br />
</i>Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com1tag:blogger.com,1999:blog-4723658433860404694.post-41638297891876447752010-08-24T16:19:00.000-05:002010-08-24T16:19:15.993-05:00Learning is Controlled ConfusionAs a teacher, I prided myself on teaching the highest level of content. I taught past the last comprehension of a student in my classes. My philosophy on learning is: I learn when I address an idea I've not previously encountered. Therefore, learning begins with confusion. As part of the learning process, a student must learn to be confortable with confusion, and logically progress to a point of knowledge.<br />
<br />
When presenting information, I presented it from many angles; however, if a student did not understand, I was "okay" and I moved on with the lesson. On any given day, a student may or may not be prepared to listen and work. I assumed the first students would fall off the lesson at 30% of concept, and the best student would depart at 85% of the content. The majority would understand 65% of the content. I expected my "student understanding level" to be a bell curve.<br />
<br />
Just was the students grouped together in the middle of the content, I used the most time on the middle content. I did teach to 100%: the final 10% were high level topics, and the final 5% were key terms. The beginning 15% percent was quick review.<br />
<br />
Exposure to higher level information sparks the students mind, and potentially fixes unresolving issues on the lower level information.<br />
<br />
I encourage all teachers to teach students to be "okay" with confusion. It is the personal state which causes the most growth. The true power of knowledge is not knowing the answer, but finding the answer.Chrishttp://www.blogger.com/profile/01620116812953292506noreply@blogger.com0