02 May 2013

Hack Your Finances - Thoughts on Extreme Retirement Planning

Extreme Retirement Planning is a financial movement that I discovered a few weeks ago. At least, that’s when I heard of that terminology for being frugal. As it happens, I’ve been implementing some of those ideas for the past year or two. But these Extreme Retirement Planning (ERP) folks crank it up to 11 and that’s where I have something to learn.

Concept in a Nutshell

  • Save as great a % as possible (up to 85% or more) of net income (post tax dollars).
  • Live off as little spendable income, including cutting out luxuries and vehicles, to the greatest degree possible.

What’s the result? Being able to “retire” in 4-15 years on the lower level of income that the ERPer has become accustomed to.

What Does This Mean for Me?

If I can live off of $1000 / mo while putting the rest of my take home cash into savings, for the next 7 years, I can retire in 2020. And by retire, I mean live off of the expected 4% growth on my principle even after factoring in 3% inflation. Then at that point, any income that I make is free to fritter or save because my daily costs are taken care of.

Assuming that there are two people working at this level of income, then living off $2000/mo as a family isn’t too tough in some parts of the country. And retiring in 7 years wouldn’t be too bad either :).

I’ll explore this concept more as I dig into trimming my excess spending.

Credit for the concept and basic calculations goes to Mr. Money Moustache.

29 Apr 2013

Goals and Giving Back: Creating Meaning in Life

[caption id=“attachment_599” align=“alignleft” width=“500”] By: John O’Nolan[/caption]

I’ve been in serious discussions with a new friend regarding the refinement of the self. The discussions started at RubyMidwest but since I don’t yet have their permission, I’ll leave the individual as a shadowy anonymous figure.

The evening of the discussion brought about a conversation regarding refactoring oneself through a constant process of testing and revising.

I shared my own experience of setting actionable goals related to various facets of my life, a choice that was influence by 7 Habits of Highly Effective People. These goals run the gamut of goals, anywhere from family, friendship, business, personal knowledge, technical skill acquisition, etc. Each of the goals is categorized and provides a broadly sketched roadmap of what I want to apply my energy to during 2013.

Without going into all of the details, I’d like to provide a couple of examples.

One of my larger goals for the year is to be less of a consumer and more of a producer. This applies both in the technical world, where I want to write more code and blog entries (rather than simply consuming them) and also in my online social experience where I’m moving out of my introverted shell and making connections with likeminded individuals. Thus far, this goal has been a smashing success. I made new Ruby friends at RubyMidwest and I’m a much more active member of the online community. I’m pleasantly surprised that this is such a natural goal to work on. It has become an outlet of my energy that’s relaxing and fulfilling.

In this same vein, I’ve become increasingly interested in giving back and contributing via teaching or volunteering in order to help others along their path. Pragmatic Thinking and Learning cites the Dreyfus Model of Learning, which loosely paraphrased, indicates that because I’m a beginning intermediate programmer, I’m uniquely prepared to lend a hand to beginners. The fact that I’ve been teaching myself Ruby for the past 3 years means that beginners’ struggles are fresh in my mind. So I’m taking what time I can out of my schedule to lend a hand to the next generation of passionate programmers.

Perhaps in the not too distant future, I’ll have a work setup that encourages and allows me to spend a portion of my time giving back to the community. The time’s approaching where I won’t be able to resist the allure of professionally joining the ranks of software developers.

If I may breach the fourth wall, what are your goals and aspirations gentle reader? I’d love to hear about them in the comments or in the walled garden of Twitter @_ZPH.

PS - Start mentoring someone, now!

24 Apr 2013

Stop, Drop, and Sleep

Exhaustion is in the air today. I fell asleep at 7pm and according to my Twitter feed, it’s not just me.

So is:

Passed out on the couch at 9. Been working so much lately :/

— ashe dryden (@ashedryden) April 24, 2013

And:

to code or sleep? that is the question.

— Derek Bender (@djbender) April 24, 2013

And Later (live update while blogging):

feel in all sorts of squinty. rest is coming.

— Derek Bender (@djbender) April 24, 2013

And Even:

@elight @_zph @centipedefarmer @bantik @kerrizor methinks I may be a bit tired.

— PJ Hagerty (@aspleenic) April 24, 2013

We’re exhausted!

[caption id=“attachment_588” align=“alignnone” width=“500”] By: umjanedoan[/caption] Exhaustion has become the norm. Take my own evening last night as an example. We had a long day at work and I was spent by the time I arrived home. After running a necessary errand, the hour had pushed towards 9PM, which meant dinner was going to be a cursory affair. You, my gentle reader, might expect me to crash into an uninterupted slumber at this point in the story. Unfortunately, I didn’t. I spent the next ~ 3 hours reading tech news, catching up with friends on Twitter, and staring semi-comatose at my laptop monitor. I tried to work on learning new programming techniques, but it wasn’t sinking in, nor did I have the requisite motivation. I collapsed into bed sometime after midnight and woke feeling groggy and spent. I’ve been reflecting on the WHY of this behavior and it’s the motivation for this blog post.

WHY

I spend a fair bit of effort in life considering my actions and the outcomes involved. I try to play these in the right manner to “Optimize for Happiness(TM)” as @erniemiller so eloquently stated at RubyMidwest 2013. But I didn’t follow through on the logical process last night because in addition to needing rest, I also needed to decompress and stimulate my mind. I’m going to go out on a limb here: I think that my reluctance to fall asleep is endemic of our social expectations in a slice of American society.

Work Longer, Faster, Smarter

Living in a culture that idolizes workaholics demands a special response from those of us who yearn to maintain a work-life balance. Especially when prone to hard work and long hours, stepping back and turning off can be a challenging habit to cultivate. I’m not sure what the right response is when we have competing pressures in life, beyond making the best decisions available given the resources at that moment. And with each decision, reflect on the behavior and outcome to determine if it should be repeated. The right answer for me that night was probably a bit of interracting with friends on Twitter (no more than 60 min) followed by time with kittens and my partner. Lesson learned, hopefully :). I’d love to hear tips and feedback for how you, my reader, addresses this. Leave a note in the comments or shout at me on Twitter: @_ZPH.

20 Apr 2013

Increasing Productivity with Shortcuts

[caption id=“attachment_582” align=“alignleft” width=“500”] By: Dennis Hamilton[/caption] I’m writing this to the incessant tick-tock of a digital Pomodoro, which seems fitting as this post will discuss productivity hacks. We won’t be talking about run of the mill ones. I won’t berate my readers to modify their ‘/etc/hosts’ file in order to route Reddit or Twitter to localhost. No, these are real habits that help me be happier and more productive with the time that I spend on a computer.

Pre-Hack Step

Have a goal. Know where you’re heading and why. Act intentionally. This has been driven home to me by my own experiences in life. Recently, I’ve been reminded of this concept by the wonderful book, 7 Habits of Highly Effective People. In it, the author paints the picture of chopping through a forest without knowing what cardinal direction one is following. If you’re trying to learn a new technology, set actionable goals for yourself and talk about it with friends and colleagues. If you’re working on personal relationships, admit that to yourself and push yourself to be better.

Technological Hacks

  • Make everything a shortcut. I accomplished this by following Steve Losh’s article On the Cadet Keyboard. I configured my MacBook Air’s keyboard to use the right Alt key as a hyper key (a chord combination of 4 modifiers). This yields a unique key namespace for setting up non-conflicting keyboard shortcuts.
  • Use a program like Keyboard Maestro or BetterTouchTool to setup shortcuts for all of your regular programs. For me these are iTerm2, Chrome, Finder (or alternative), ThinkingRock, Email Client etc. My terminal is never further away than a HyperKey-T and possibly a Cmd-N to create a new window.
  • One keyboard shortcut that stands out on my system is a keybinding via Sparrow’s preferences. The combination alternately brings Sparrow to the front, or hides it. This is amazingly useful in order to not lose as much energy in context switching. In a matter of 4 seconds and by mashing the same key combination twice, I can check on a new email and then relegate Sparrow to the background.
  • Make great use of Alfred.app! Use custom searches for common items (ie Google search becomes “g searchterm”, note that this is built into Alfred). Add your own shell scripts for common tasks, ie checking for information on a public website via a prefilled URL. Use Alfred to execute regular shell commands by prefixing the command with a “>”. For example, I added a Ruby script to my ‘~/bin’ directory that sends an email to my dedicated GTD account. I access the script from Alfred, fire off a note for later, and am back to my current task without much distraction. This is a great way to keep your mind empty and receptive (just make sure to process the GTD tasks in a timely manner). Have more productivity hacks? I’d love to hear them in the comments below or via Twitter @_ZPH. I’ll post at some point about my experiences with the Pomodoro technique, but at this point it’s too early for me to comment.

12 Apr 2013

RubyMidwest 2013: Lessons and Reflections

20130411 RubyMidwest 2013 Me, Evan Light and PJ HagertyI attended RubyMidwest and want to share both my impressions and resulting growth. But let’s backup, I had debated whether to drive or to fly out to Kansas City, MO for the conference. With only two weeks to spare, our primary long distance car began having some trouble. So, I looked into the costs of renting a car, the cost of wear and tear on our car, vs the possibility of flying. After tallying up the costs and figuring that I could work part of the day while flying, I booked a ticket for Kansas City. In the future I’ll be more eager to travel by air, given that I can successfully work from anywhere with WiFi or 4G Coverage. To a lesser extent, for non-connected work, I’m also productive without the internet. If my first successful choice was flying, then my second successful choice was when I scheduled my arrival and departure. I flew in the day before the conference and out the day after. By doing this, I was rested going into the conference and able to socialize the night before it started. Flying out the day after the conference had the same effect of enabling more time with the folks that I wanted to see. Now mind you, I find these concepts fairly un-engaging but they’re important for getting the most out of the conference experience. My next big win was staying at the official conference hotel. This means that at 4am when you can barely see straight from tiredness, your bedroom is only an elevator away. Staying at the main hotel also encourages social activity… which is why we’re really at the conference. Yes, it’s more expensive. Yes, it might be a tacky venue. Yes, it’s not all magically hipster delicious. If money’s an issue, post on Twitter that you’re looking to split a room. I had the pleasure of sharing the room with Evan Light because he posted on Twitter about the hotel not having vacancies. Sharing a room’s also a great way to make sure you’re staying in the social mix of the conference rather than scuttling off to a quiet place.

Twitter is the lifeblood of Ruby Conferences.

Add a column in your Twitter client to track the hashtag designated by the conference. This means you can follow the flow and group activities. It’s also a good place to share your enthusiasm for RubyMidwest and ensure that next year has an equally awesome crowd. If you’re shy or want help being social, post something like, “Hey come say hi to me, I’m wearing a Yellow Gnu Linux T-Shirt”. Incidentally, that’s how I met Matthias who is writing this book about the Padrino Framework.

Never Eat Alone

Except for coffee when you’ve just rolled out of bed after 4 hours of sleep. Otherwise, don’t eat alone. This is your magical chance to spend time with people as nerdy or nerdier than you. If you’re stumped for conversation, ask how they started programming, what their favorite Gems are, what tools they use, if they’re part of the 20% of programmers who Raided in World of Warcraft (then judge them according to whether they rolled Horde or Alliance).

Find a Small Group

I preferred the time spent in groups of 2-8 people. This size allows for meaningful conversation between the participants. It’s also easier for those of us who are slightly hard of hearing. Each night of the conference had some conversational highlights. Friday night’s highlights were centered around the balcony at the after-party. @kobier, @elight, @samullen explained to a fellow not from the conference what it was that programmers do. By the end of the conversation, the young man was very enthusiastic about learning to program. I volunteered to help him get started and we’ve been in email contact since the conference ended. This conversation was an impressive display of the welcoming attitude that can exist in the Ruby community. On the last night of the conference, after the energy had worn off, I had some meaningful and insightful conversations. I’m looking at y’all: @Bantik, @zmoazeni, @aspleenic, @ashedryden, @erniemiller, @kerrizor, @theOtherZach, … and more.

Initiate Conversations

I started many conversations at RubyMidwest simply by walking up to people and introducing myself. The odds are that this will lead into a flowing conversation. If it’s stilted and awkward, get the conversation onto technical topics… that’s the bread and butter of conferences. Also, people at regional Ruby Conferences are remarkably friendly.

Company Culture Shows Through Employee Behavior

I’m looking at you genial folks from @Harvest: Zach and Paul. Sending folks who positively represent your company to community conferences is a win-win situation. The devs get to stretch their knowledge and have fun. The company builds a reputation among Ruby’s enthusiastic true believers. Why wouldn’t companies want to recruit from this pool of people?

What Did I Really Learn?

That I’m attending MadisonRuby, SteelCityRuby and DCamp this year. I finally decided to transition from an anonymous icon on Twitter to a goofy pic of myself.  Doing this is a direct result of making #rubyfriends at the conference.  And when they see me on Twitter, I’d rather that they see my face delivering the pithy witticisms. I’ve submitted a conference talk proposal to two venues since returning from RubyMidwest.  I’m also excited about stepping up my programming game and getting more involved in the community. These are my people :).

Thanks

To Wes Garrison of Databasically, Sam Mullen, Ross, Cerner, and everyone who made this event possible.

20 Mar 2013

Pricing a Product: Napkin Math

I’m facing the novel prospect of pricing a software product. This product is something that I created during evenings and weekends. It’s very specialized for my current industry, so I won’t go into the details of the product. But suffice to say that it sorts data in a time saving way.

Product Benefits

  • Saves 1 to 10 + hours per assignment
  • Each hour saved is worth ~ $30 +
  • Each team member has their own assignment
  • 5 to 10 assignments submitted each week
  • Concept can be applied for other divisions, requiring 60% retooling of the application.
  • Providing difficult to find answers which could avoid legal fees and fines ranging from $10,000 to $1,000,000 or more.

Product Costs

  • Developer’s time, my own = Approximately 240 hours.
  • Ongoing maintenance time = 0.5 hr / wk.
  • Monthly hosting cost = Variable based on capacity but definately < $50 / month
  • Equipment, utilities, etc during development = Not factored into estimates.

Additional Factors

  • Charging for the creativity that provided the impetus.
  • Specialized industry knowledge = Priceless :)

What’s my thought process?

My first thought was to give it away as a way to parlay into a different technical role in my organization. Like a good dealer, the first custom software taste is free, but the rest will “cost ya”. Given further information about pricing dynamics and company response to innovation, this is not seeming to be as appealing a prospect as previously thought.

Cost based pricing

Charge a sum based on the hours invested plus a bit of padding. This is the natural method that comes to mind when I consider pricing. According to RubyFreelancer Podcast, this is the Retail method of pricing. They also explain at length that this is a shortsighted method of pricing a product. The short explanation is that this ties your income to an hourly wage. One can certainly make a solid income off of these numbers. But it’s difficult to transform a product into residual income or a grand success.

Result

240 hrs * $150 / hr = $36,000

Naive Pricing

Price the product at an arbitrary value, such as $5,000. This one is also tempting. This approach seems to reflect ‘Imposter Syndrome’. Pricing arbitrarily doesn’t tie the product’s price to the benefits and savings received by the purchasing organization. Based on the business books and sales books that I’ve read in the last year, this isn’t a likely method for sales success.

Value/Savings Based Pricing

Price the product so that purchaser saves money by using it. 10 assignments/wk * 2 hr savings/assignment * $30 savings/hr = $600/wk savings + Improved chance of avoiding legal fees + Providing more accurate information to company’s client, leading to increased client retention. (Would cost $12M+ to lose a client) = $50k to 100k Savings if my system is implemented beyond our regional office (ie statewide) = ~$6,000/wk on speeding up completion of assignments. This value doesn’t factor in avoiding legal fees or improved client retention.

Conclusion

My plan to learn more about business and sales is already changing the way that I approach the process of selling my product. I’m moving towards value based pricing and considering how to turn the product into a residual income stream. It’s a very exciting time! Note: Just for the record - I intend to retain Intellectual Property rights given that it’s my own work product in off-hours.

09 Mar 2013

Two Factor Authentication for All the Things

I recently went wild with two factor authentication due to reading about Chicago VPS getting hacked. I received the nicest email from LastPass warning me that my email address was among the SQL dump posted by the hacker.

My Response

First off, according to ChicagoVPS all the passwords were in the form of salted hashes. So that’s good! Also, I use unique passwords thanks to LastPass. So losing one password to a SQL dump in the form of a salted hash isn’t a big deal. At least not with ChicagoVPS. Might be a bigger deal if it was Amazon AWS or a Google Account.

Back to the Point

I read a wonderful article, by chance, about a new service called Authy. Authy provides easily integrated Two Factor Authentication services that use your phone as the second factor. Authy either uses a smartphone application or a system based on SMS.

So where did I add it?

Caveats

After turning on Two Factor Authentication with my Google Account, I needed to setup and start using ‘Application Specific Passwords’. They’re a way to have a unique password for specific services that are not setup for the Two Factor Authentication system. To find the settings: Log into Gmail > Settings > Account > Security > 2 Step Verification Settings > Manage Application Specific Passwords > Login Again > Scroll to Bottom of Page. For each item, like Thunderbird, Sparrow App, Android applications, etc, you’ll need to give the specific password a name. Next click ‘Generate Password’. Copy that password into your application. I must say, I’ll be a lot more comfortable with online transactions when most service providers (esp. Banks, Investment Accounts, Amazon.com, etc) offer Two Factor Login options! Let me know if you’ve found any other useful places for using Authy’s wonderful 2 Factor Auth through the comments below or on Twitter @_ZPH. Credit for this article’s inspiration belongs to : This BlogFollow up… Flashed a new Rom to phone and my only hassle was with Amazon Aws 2 factor Auth. Make sure to do Authy backup to simplify this before flashing new Roman.

03 Mar 2013

A Week with ThinkingRock GTD

[caption id=“attachment_529” align=“alignright” width=“300”] By: Thomas van de Weerd[/caption]

The Good

My first week with ThinkingRock has gone REALLY well for adding tasks. I sit at the computer for much of the day and when a GTD task comes to mind I dump it via Cmd-Space GTD "description of task".

The Bad

Having a very efficient system for adding tasks paired with a HORRIBLY inefficient method of processing tasks causes my GTD Inbox to overflow.It’s like having a firehose flowing at full strength and routing it into a gardenhose.

The Analysis

The method that I’m using for adding tasks is very well optimized and uses a decoupled system. Being able to send emails from any device and having the subject and content dropped into ThinkingRock as a pending task is GREAT. When I go to sort the tasks, I’m stuck with a system that very literally follows GTD principles, but doesn’t have sufficient keyboard shortcuts. Processing 35 items by tabbing through textboxes and radio boxes isn’t my idea of an efficient system. It also makes me wonder if other people are painstakingly mousing through the interface.

The Answer

Dig into the source files for ThinkingRock and add enough keyboard shortcuts to “get things done”. I started this yesterday on the plane to California and I’ll post back when I have a chance to work on it more. Given that I don’t know any Java (other than a session at the LeanDog CodeRetreat with Steve), this will be an interesting challenge :).

23 Feb 2013

Benchmarking GTD

[caption id=“attachment_533” align=“alignright” width=“300”] By: Rubbermaid Products[/caption] I’ve been working with RescueTime for the past week and I’m VERY happy. First off, I don’t have to change a thing to make use of the system. It’s a great way to benchmark my own time spending habits on the computer. It’s well setup to allow individual configuration of what you believe is productive and non-productive. During setup, I thought about all the facets of business and independent projects. I concluded that email is a neutral value of productivity, while programming is +2 and reading HackerNews is -2. I’m happy to share this chart for my first week of use: [caption id="" align=“aligncenter” width=“1035”] RescueTime - 1st Week[/caption] Notice that I tagged email and meetings as a productivity of 0 because so little useful action comes out of them. Frequently meetings would be best accomplished in short bursts and email involves _LOTS_ of needless repetition. Given that email accounted for 6 hours of my workweek, I decided to improve the efficiency of my email process. I setup my email account with OtherInbox. OtherInbox is an email sorting service that does awesome things with Google Labels. Next I added two key combinations for Sparrow.app. One key combination opens a new email from ANY application while the other key combo brings Sparrow to forefront or hides it again. These two changes have saved me lots of time so far and reduced the effort related to context switching. Share your tips for email hacks and productivity (GTD) hacks! I can be reached via the comments and as [@_ZPH] on Twitter.

21 Feb 2013

Finite Keystrokes Before Death : Making the Most of Them

[caption id=“attachment_526” align=“alignleft” width=“300”] By: ericnvntr[/caption] The idea that we possess a finite number of keystrokes to consume before death is an ominous consideration. That’s the concept mentioned in one of RubyFreelancer’s archived shows by Eric Davis (if I remember correctly). I believe he’s quoting another person in the episode when he talks about having a finite number of keystrokes remaining. I’ve been using a text expander, i.e. snippet application, to help manage the repetitive work of typing. Common phrases or sentences that I use are added as re-usable phrases to a handy program called Dash. Dash observes when keystrokes are entered and if a trigger keyword is used, such as ‘iirc’, the program replaces that text with ‘if I recall correctly’. Dash also allows the phrase to have replaceable variables, just like you would expect fom ‘Yasnippet’ or ‘Snipmate’. As a bonus feature, Dash serves the dual purpose of being a ‘Heads Up Display’ style documentation viewer. It’s a great way to lookup STDLIB info from Ruby or CSS info. The only drawback that I’ve found is needing to manually generate Rdocs since my system settings for RVM do not install them. I accomplished this using the following script:   I’ve used the text expansion feature to save thousands of keystrokes in repetitive form entries where other automated solutions are not available. Try it out and let me know what you think in the comments or on Twitter @_ZPH. Oh yeah and map the HUD to something easy to remember like CMD-CTRL-SHIFT D. I keep all of my system-wide shortcuts on the same triple modifier chord so that they’re unlikely to overwrite standard shortcuts :). What other methods do you have for reducing repetition?