I'm a husband, father, author, cyclist, sailor, travel addict, and former Silicon Valley software engineer. I've written 3 books and actively review books on this blog.
Comments on this blog are aggressively moderated against link-spam and rude or meaningless comments.

Monday, April 28, 2014

Since helping my wife with her Nutrition Tracker App, I'd had a chance to try both Eclipse and Android Studio for android app development. Both of them run on Windows, my preferred platform, but it didn't take 3 days with Eclipse before I got frustrated with frequent crashing, features not working, and a lousy layout tool. I found Android Studio and downloaded it and soon persuaded my wife to switch to it.

Android Studio is based on IntelliJ IDEA. Back at Google when I was doing Java work, I avoided it like the plague, preferring to stick with Emacs and gtags. That's because Google's Java source base was so big you couldn't possibly load it into IntelliJ on the puny workstations of that time (yes, Google only supplied machines with 2GB of RAM in 2003), and even if it had been possible, those machines would have slowed to a crawl under the load of processing that much code. IntelliJ/Eclipse die-hards were resorting to wacko tricks like subsetting Google's code base so it could load into IntelliJ and then writing plugins into gtags for accessing the rest of the source code. I have no idea what Googlers do today, but my suspicion is that things haven't gotten much better.

For small Android projects like Nutrition Tracker, however, an IntelliJ is just about right. If you're unfamiliar with the Android API, it would supply you with method name completion, tell you which arguments to supply in which order, automagically add imports, allow for automatic refactoring tricks such as moving methods, renaming variables safely, and moving inner classes out of their outer classes, shifting classes between packages, etc. The layout tool helps you avoid having to learn the lame layout XML language, so you can actually try to make things work (as opposed to making things look pretty and usable --- I think Emacs is a great UI, so I have no expertise on those topics).

Android Studio is slow. It's slow to startup, it's slow to compile, and it's slow to run the debugger. A typical edit-compile-debug cycle would take around 10-20 seconds in order to build a tiny app. Note that I'm not complaining about Android Studio's massive use of resources while I'm editing. I think that's entirely appropriate. I want all my 4 cores/8 threads to be utilized in order to make my coding experience faster and more pleasant. I don't even mind the startup, since it doesn't need to happen that frequently, and it's a one time cost. But the Gradle build system is not only a resource hog, but it introduces additional latency into my think-time, so I begrudge every second it's spending traversing dependency graphs instead of actually compiling code. I have no idea why the Android Studio engineers chose a clunky system like Gradle, as opposed to rolling their own and integrating it fully into the IDE. I never want to edit the gradle build files manually, but the system forces me to. What's more, the syntax is really obscure and the documentation is inadequate.

For instance, when doing an android release, the documentation only covers Eclipse. Worse, the documentation lies to you. It tells you to modify your Manifest file, and I did. Until I kept scratching my head as to why that never worked. It turned out that you had to modify the Gradle config, since the Android Manifest XML file was ignored in the presence of Android Studio. Well, that took so much googling around that I can't remember what search term I used to uncover the Stack Overflow answer any more.

The source control integration is also funky. It supports Git, Mercury, and Subversion, but not Perforce. Given that Google uses Perforce internally, I surmise that Google's internal projects do not use Android Studio. This does not bode well, since that will mean that Android Studio's most serious problems (build performance) will most likely never get addressed because its non-existent internal customers will not feel the pain.

For quick and dirty Android projects, Android Studio is probably the best there is. If you're serious about building an Android app, however, my suggestion is that you use Emacs and roll your own build system that's decently fast. Otherwise, the benefits from using an IDE will be swamped by inordinately long compile/edit/debug cycle times. Note that though my machine is old, it's still decently powerful compared to even the fastest rig today, let alone the kind of laptops most "hip" developers favor, so it's unlikely you can solve Android Studio's problems by throwing more hardware at it.

Recommended only for non serious Android projects. It's a great tool for getting started quickly though, so use it to bootstrap yourself into doing Android development if that's one of your goals.

Friday, April 25, 2014

I've always been tempted to build my own PC. I'm no stranger to the tools, since my internship at Geoworks effectively required me to take apart and put together the machine I was given at work. But until recently it made no sense. Machines were increasing in performance significantly, so every 2-3 years it made sense to get a new machine. When you're getting new machines that frequently, it doesn't make sense to build your own, since the beige box vendors can get you much lower prices, and the cost of your time to swap motherboards, CPU sockets, etc., in and out would swamp the ability to bring over your hard drives, etc. Given Moore's law, every 2-3 years you'd have to buy all new hardware anyway!

I recently took a look to see if it was worth replacing my 5 year old desktop. To my surprise, the answer was "no." Looking at the CPU benchmarks, it looks like a "modern" i7-4770 would clock in at less than twice the performance of my 5 year old i7-920. In the old days, 5 years would have been enough to get at least a quadrupling of performance. Not even getting a doubling in 5 years would have been unthinkable. Part of it is that Intel's no longer getting any competition from AMD. Part of it is because getting up past about 4GHz would overheat a PC, so the easy way out of just merely increasing clock speed is out. Increasing the number of cores have already hit diminishing returns as far as most PC users are concerned (I'm an exception: I regularly process video).

The flip side of this is that the base operating system hasn't been using more hardware resources recently. Windows 8 is actually less resource hungry than Windows 7, which would have been unthinkable in the old days. Thanks to Microsoft's desire to compete in the tablets space with Apple and Google, Windows 8 actually runs decently on a tablet with just 2GB of RAM. This gave me the courage to replace my wife's 4-year old X201 with a Microsoft Surface Pro with half the RAM. My wife didn't even notice the missing RAM, despite running the resource hungry Android Studio, which is enough to spin my desktop PC's fan up.

This has several implications for users and developers:

Rather than buy a mid-range machine and planning to replace it every few years, it might be cheaper to build a high end machine and upgrade components. Given that CPUs and motherboards are no longer going to have to be trashed every few years, you might as well get a chassis that supports easy hard drive and SSD replacements/expansions, and GPU upgrades, if you will run GPU-intensive activities.

I/O standards do make a big difference, but any PC with a free slot will let you upgrade to USB 3 and other standards, so again, expand-ability might be more important than "planning to throw it away."

An adequately high end machine will probably last a good 10 years in this environment (i.e., a i7 4770k wouldn't be obsolete for 10 years), which means that it makes sense to put money into a high quality power supply, since the higher quality power supply would provide cost savings when you plan to run a machine for that long. This is in contrast to the "buy-and-replace" strategy, where spending $20 more on a better power supply wouldn't pay for itself in power savings.

This also seems to be applying to laptops, though laptops do benefit from the power efficiency gains of the latest processors, so if battery life matters to you, an upgrade every 4-5 years might make sense. The way most people seem to use laptops (constantly plugged in and never actually used as a mobile device), I think most people should replace laptops every 10 years, getting new batteries every 3-4 years or so, assuming that their device supports it.

I never thought I'd see the day when PCs would be expected to last as long as cars, but then again, I never thought I'd see the day when Microsoft would roll out huge new products and initiatives and everybody would just yawn. But yeah, my next PC is going to be something I build from the case in, and I'd be planning for it to last a good 10 years, something I did not expect when buying my previous desktop. I would have taken a completely different approach otherwise.

Thursday, April 24, 2014

I've long been a user of Cytomax as a supplement for my water bottles. It's cheap, easy to use, and keeps the cramps away adequately. I'm a heavy sweater, so having an electrolyte drink is pretty much a necessity. Unfortunately, they recently changed their forumla to use stevia instead of sugar, which means that it's no longer the same as before. In any case, even prior to the formulation change, Cytomax had other problems for on the go use. It was difficult to carry, didn't provide a convenient way to meter usage, and I usually ended up doing without rather than bringing it on tour.

Endurolytes were our go to source for touring. They're essentially salt pills, and eating them a handful at a time was good enough to eliminate Mike Samuel's cramps during a particularly hot tour of the alps. They're relatively low density, so you really have to pop them like candy to have any effect. And of course, being capsules, you essentially have to stop to eat them, unlike Cytomax.

I recently ordered Nuun at a website in order to top up an order to receive free shipping. It comes in a tube and each tube has about 12 tablets. You use 1-2 tablets per bottle, solving the metering problem. Since it dissolves into your drinking water, it's particularly suited for touring cyclists who don't like to stop just to take capsules. It's considerably more expensive than Cytomax, though with Amazon's subscribe and save option along with Amazon Mom and my reduced riding load nowadays, it's still quite affordable.

The taste is much weaker than Cytomax, and that's a good thing. I frequently do get sick of Cytomax if I use too much, but this minor fizzing flavor is just right for me. My biggest problem with it is that it's not calorie dense at all. Come on guys, if you're designing an electrolyte for cyclists and runners, don't skimp on the calories!

In any case, I've turned on a subscription and will now use it for bicycle tours. Recommended.

Thursday, April 17, 2014

Occasionally, I'll get a sales person, product manager or program manager, or even a marketing person ask me to help negotiate their compensation package. With one exception, I invariably turn all of them down. The reason is this: negotiate is a core skill for product managers, program managers or sales people, while the core skill for engineers is being able to design and code, with negotiation being secondary. In fact, one of the ways an engineering manager adds value to an engineering team is negotiating on their behalf with other engineers and with product management and/or UI designers.

If you look at how we train engineers, it's pretty clear that negotiation is out of the picture. Engineering exams aren't graded on style, readability, or collaboration. They're graded on correctness of solution, ability to apply principles and data structures to new areas, and of course, whether or not your project works. What negotiation there is in the engineering curriculum is informal: you might be asked to work in teams to turn in your homework (as a former instructor, I can say with confidence that this is usually so that we only have CLASS_SIZE/N papers/projects to grade, rather than CLASS_SIZE). As a result, engineers are singularly unprepared to negotiate their compensation in a way that sales people, PMs, or marketing types are not.

There's also a fairly subtle effect going on when engineers negotiate their compensation package. Most engineers are in a position to find a new job only because they're unhappy with their old one. Why are they unhappy? Usually it's because the old position did not make full use of their abilities: either they've been stuck in a junior position for years (I've heard horror stories about engineers at Google being stuck at SWE 3 for 5 years, despite performing way better than their grade), or because they've not been given raises, or both. In these cases, usually the managers have consciously or unconsciously beaten down their egos and repeated told the engineers that they're not worth much in the market. One of the things I do is to get such engineers to interview and receive multiple offers. The change is almost immediately visible in such candidates: they gain confidence as they realize that they are valuable employees, and this has an effect when they negotiate. The extra confidence enables them to negotiate and get better deals from their employers. Sales people, product managers or program managers, for whatever reason, seem to be immune to such beat-downs, retaining a healthy ego even when consistently denied promotions.

My negotiation service is unique because it's an irrational thing to do. The real money in compensation negotiation is on the other side of the table. Recruiters and head hunters get 30% of your salary (i.e., your entire engineering salary for a year * 0.3) for getting you to join their client companies. That's why there's no competition for what I do. There's no engineer who'd be willing to match what corporations pay in order to get a better deal.

Wednesday, April 16, 2014

Our trusty X201 had been getting long in the tooth, and Xiaoqin decided to try some Android development. If you've ever tried Android Studio, you'll know that it's a CPU intensive process since it's based on IDEA IntelliJ. The build system associated with Android Studio, Gradle, is also a massive CPU hog, and introduces no small amount of latency to the process. I never thought I'd miss the days of Visual Studio, but it's quite clear that compared to Microsoft's tool set for development, Android is quite a bit behind, and extremely unstable. Of course, in terms of market share, the positions are exactly reversed.

After trying out a Surface Pro in the store a year or so back, I vowed never to buy a conventional laptop again if I could buy a Surface Pro-type device. Fortunately, Microsoft was having a sale on refurbished Surface Pros, so I was able to pick up a 128GB model for $450. You can find them for about $500 if you're willing to put up with a 64GB model. With USB 3 and a microSD card slot, it's probably no big deal if you can't find the 128GB model.

As a laptop, it's quite impressive. It's about 50% faster than the older X201, and 3X faster on boot up, hibernation, and recovery from hibernation, with boot times going from 30s to 10s. And yes, this is with the X201 upgraded to an SSD. There are a few strange fit and finish issues, such as the mini display port slot not being very deep, so when inserting a standard cable there's a little bit of chrome sticking out. The tablet comes with a pen, but there's no place to put it except in the magnetic charging port, and the magnetic charging port isn't strong enough to retain the stylus without loss if there's any pressure whatsoever on it. Since this is an expensive Watcom digitizer stylus, you really do want to keep track of it!

Running Lightroom is fast as you might expect, with no hitches and the Surface Pro had no problem driving the 27" HP monitor with a 2560x1440 display. One nice mode you can run is to have the touch screen run the Start screen, while the big display runs the desktop. This gives you a nice touch UI for the touch part, while having the desktop to do real work. Of course, Microsoft had to glitch this up---in this mode, desktop apps still launch onto the small screen instead of automatically selecting the big screen. It's this kind of inattention to detail that gives Apple its edge over Microsoft, though I've found Macs to have their share of problems when using multiple screens.

The device has a fixed, 4GB of RAM, but surprisingly, until I told Xiaoqin about it, she didn't even notice it didn't have as much RAM as her old device. At least part of the reason is that Windows 8 Pro actually consumes fewer hardware resources that Windows 7 did. The other part of it is that in recent years, software developers just haven't been able to assume more than 4GB of RAM anyway, so as long as you're single tasking or running just one web browser and an application, you're generally OK.

As a tablet, the Surface Pro is quite hefty, though not as hefty as the X201. It makes up for that, however, with power. I'd already written about how much faster the Dell Venue 8 Pro is than my Nexus 7. Using the Surface Pro is instantaneous. The Type Cover is also a joy to use, giving you keyboarding performance akin to what I'm used to with the X201.

The real revelation, however, is the stylus. I'd never tried any of the previous PCs in tablet mode, other than my use of the Wacom Bamboo tablet for producing Independent Cycle Touring. But while I hadn't noticed, Windows' handwriting recognition has become nothing short of amazing. My handwriting can compete with any doctors' for sheer inscrutability, but the Surface Pro handled my cursive with aplomb, as long as I was writing common English words. Write something not in the dictionary, and just like any other machine translation program, and you end up with gibberish. There was no training period, however, and I could pick it up and use it. You could even turn on Chinese handwriting recognition, though Xiaoqin pointed out that Pinyin is faster and much easier to use with a real keyboard. Unfortunately, having multiple languages on the machine is problematic if you use a keyboard, since Microsoft used Windows-Space to switch between languages, and Xiaoqin found it far too easy to hit that combination by mistake. In past versions of windows we tried to change the language key bindings but to no avail, so we gave up and uninstalled the language pack instead.

All tablets are compromises. The Surface Pro does not have great battery life. 3-4 hours with Android Studio and that's it for the battery. When fully powering Android Studio, the device also gets hot enough to turn on its fan, which sounds like a low hissing noise. It's quieter than the X201, but still noticeable if the room is otherwise quiet. Next to my Core i7 920 box going full bore, of course, it might as well not make any noise. At no point would you burn your hand grabbing the Surface Pro, however, so there aren't any safety issues.

Long term, the biggest concern about the Surface Pro is the battery. With the machine running hot, and the battery fully charged most of the time in desktop mode, I would be surprised to see more than 3 hours of battery run time after the first year, and 2 after the second year. Most laptop batteries get abused this way as well, but the Surface Pro has a non user-serviceable battery, with the only option being the $200 power type cover. Fortunately, for the price (which is much less than what I paid for the X201 way back when), we can treat the Surface Pro as a disposable computing device. This is much more of a concern nowadays, however, than it would have been 10 years ago. 10 years ago, you'd expect to replace a machine every 3 years. Now, an adequate machine (which the Surface Pro most definitely is) could have a potential life time of 5-6 years. At the rate Intel is improving (or not improving) CPU performance, I'm likely to keep my desktop for another 2-3 years at least!

There are a few accessories that I would recommend for the Surface Pro. The first is a Type Cover. We tried both the Touch Cover and the Type Cover in the store, and the Type Cover was hands down the winner. Secondly, you need a USB 3.0 hub if you're going to attach a debugging phone as well as a wireless transmitter for wireless keyboard and mouse. The Surface Pro comes with bluetooth, but it was easier to just use the existing Logitech mouse and keyboard than to shop for new ones. USB hubs can be powered or unpowered, and we got an unpowered one for convenience when traveling. It'll make the device drain that much faster, but having one less power adapter to carry will be essential.

In any case, so far, I'm liking the Surface Pro far more than I expect, and Xiaoqin hasn't asked for the older X201 back. I'm expecting not to send this back to Microsoft after the 30 day return period.

Tuesday, April 08, 2014

I picked up Flower as part of the Journey Collector's Edition, but if you pick up the digital PS4 edition, you'll get it for the Vita and PS3 as well. Given that Journey is a great game, the collector's edition is worth getting as it gets you the soundtrack as well as a few other specials.

You play the wind (or maybe the spirit of Spring) in Flower, picking up flower petals by making flowers bloom. That's it. It's a simple mechanic, made only more difficult because rather than using joystick controls, the game uses motion controls using the Playstation controllers. (I bet most of you didn't know that the Playstation had motion controls that weren't associated with the Playstation Move, did you?) That's not a good thing, because those controls are imprecise, but on the other hand, this is not a game that calls for a lot of precision.

The first few minutes of the game feels puzzling. You almost feel like you're in a tech demo, rather than a game, as there seems to be no purpose. Then after a while, the game picks up and you learn that yes, there actually is a goal, other than floating around swirling petals and admiring the scenery, and there's even a story. It's not a very human story, as there's no dialog, but you also notice attention to detail at the game's level. For instance, there's background music to the game, but you add to it every time you make a flower bloom, and depending on how you control your speed, you can bloom flowers at varying rates, so you're contributing to the soundtrack as well as the game play. This is so beautifully and naturally done that I didn't notice it until I missed making a flower bloom at one point and then the music sounded different. Not wrong --- there's no real punishment for mistakes, but different, giving the game a different mode. Very well done.

The game's story leads you through 6 chapters, though you can go back and replay any of them in any order. Bowen loved the first and second chapters, and made me replay the first 3-4 levels over and over. They are beautiful, and the controls are a sheer joy. The 5th level is where it gets serious and you can actually take damage, and it can be much more confusing as to what you're supposed to do. However, even that level is not very long, and you're unlikely to get stuck in it. The final stage is enjoyable once again and a lot of fun, even exhilarating, and all too short.

As an experience, Flower isn't as strong, long, or contemplative as Journey. However, it is short, and very accessible for even toddlers. I can recommend it for everyone, but do not consider it as much of a "must play" as Journey is. Judging by the trajectory of the developer, thatgamecompany, I'm looking forward to seeing what they produce for their next outing. I don't think there's anyone else doing the type of games these folks are doing.

Monday, April 07, 2014

Journey, for me, was a magical experience. When I sit down a reflect on the games I've played since December last year, many of them fall into the "interactive movie" category. There's nothing wrong with that. The Last of Us, had me thinking about its themes long after I'd finished the game, and Arkham City is an excellent story that would hold up to any of the Batman stories in any other medium. But those games wouldn't lose all that much if they were translated into movies. In fact, without the constant repetition and restarts due to player deaths, The Last of Us might even make a better movie than it did a game.

Journey, however, is the kind of experience that only works as a game. The wonderful thing about it is that it's an incredibly accessible game. Using only the twin analog joysticks and two buttons, it's a game that eschews complexity, timing based controls, and high speed reflexes and hand-eye coordination for a contemplative travel through the virtual landscapes it renders and the emotional spaces it evokes. What's more, unlike hard-core games that require hour upon hour of slogging and skill mastery, Journey is relatively short, and if you have time to watch a movie, you will have time for Journey.

You control a traveler, rendered in simple fashion little more sophisticated than a stick figure. The start of the game has you contemplating a mountain far away, and it is understood (though the game never explicitly tells you) that you are going there. Along the way, you traverse a desert landscape, an underground cavern, underwater spaces, and a snowy tundra. You visit ruins, and encounter creatures, most of which help you, and perhaps, another traveler representing another player who is also making the same journey.

You can't die, though there are moments when you are threatened, even succumbing to those threats won't hurt your ability to finish the game. The other player who might travel with you can't help or hinder you in your travels. In fact, other than a couple of gestures, you can't even communicate with each other explicitly. Yet the nature of the game is such that mere presence still grants you camaraderie. The puzzles will never stump you for more than 10 minutes, if that. There are no difficulty levels, no ability to save or restore the game. At no point are you forced to move forward, and nothing shoots at you when you're having a contemplative moment or just enjoying the scenery.

If Journey was made into a movie, it would be flat, lacking the emotion it was designed to evoke. But by taking on the character in a virtual space, and providing the means for various forms of traversal, Journey managed to invoke in me feelings of exhilaration, as I slide down a sand dune or soar through the skies towards my goal. I felt fear, when a monster detected my presence (even though I knew I could not die), and came after me. And there were many many moments of wonder as I wandered through a new landscape, not knowing what would come, but enjoying the moments of beauty and solitude that came with making my way through the virtual spaces. The combination of the design, the music, the simplicity of the controls and the way the game teaches you what to do with just dialog and just a handful of on screen prompts in the first 15 minutes of play is nothing short of amazing.

I don't want to over-state the pleasures and the strength of Journey. I wouldn't go as far as to say that you should acquire a PS3 just for this game. (I'd say that for Uncharted 2) But it truly is a game that I think just about everyone should play just to understand why video games are art. Just as missing out on great books like A Wizard of Earthsea would be a great pity, I think missing out on Journey would also subtract from your life.

I bought Journey as part of a collector's edition. However, I will review the other two games on that disc (Flower, and Flow) separately. You can also purchase Journey directly from Sony as a download for $14.99. Highly recommended.

Friday, April 04, 2014

I'm a big fan of the tower defense genre of games, and have sunk countless hours into the original flash-based game, as well as much nicer looking Defense Grid. Strangely enough, there aren't very many mobile versions of the desktop tower defense that are worth playing, with Space Station Frontier being the only one that's really any good. (I found a common recommendation, Fieldrunners HD to be extremely lacking in imagination compared to even the original flash-based game --- other games were filled with in-app purchasing which sucks all the fun out of gaming, as far as I'm concerned)

That is, until I picked up Pixeljunk Monsters Ultimate HD for my Vita. The game's also available on PC, but I feel it is best played with a joystick and control buttons rather than mouse and keyboard, so I would encourage you to get a controller for the PC, if that's your platform of choice. Obviously, the PC version would be much less portable than the Vita version.

This game is extremely challenging. On Easy difficulty, I found myself having to play most levels more than once. In particular, sections of the game are locked away unless you score perfect scores on a certain number of pages, so I found myself replaying levels over in search of the score. On the easy difficulty at least, the game offers multiple paths to victory, with a great selection of different towers to use on various challenges.

The game features several unique mechanics. The first is that you control an actual character on the game board, which constraints you several ways. Your character creates and sells towers, as well as picking up gems and coins (to purchase new towers). Your character can also upgrade towers by dancing on a tower, or you can upgrade towers with gems. Your character also needs to run back to the base in order to purchase new tower types. With all these constraints in place, the game ensures you always have a plethora of choices to make, which forces you to pay attention to every detail.

Another unique mechanic is the concept of earned interest between waves. By not spending your coin, the game grants an interest bonus between waves that generates more coins. This mechanic basically adds tension between setting up additional towers right away or waiting for the last moment in order to garner the most bonus interest possible.

Your character can also get run over by the invading monsters, which would cause you to lose a number of coins as well as rendering him incapacitated for a period of time. If you don't pick up coins or gems within a certain amount of time, they'll disappear off the game board, which again generates a certain level of tension between running after the coins or staying put and upgrading towers by dancing.

The monsters are typical of the genre, with slow, fast, numbers, shielded, and flying monsters ensuring that you have to build a variety of towers in order to win.

Now, the most important part of a tower defense game is the maps or gameboards. The game features approximately 21 game boards, and the variety between them is pretty cool. They range from the difficult to the nearly impossible to get through without taking losses, and are ranked in difficulty with certain special missions granting you additional tower types or upgrading your character.

The game's extremely replayable, will be free this month on Playstation Plus if you have a Vita. In any case, I definitely got my money's worth for the game and can recommend it.
UPDATE: PixelJunk Monsters is available for $5 on the PC/Mac directly from the developer. This sale will last for 5 days.

Tuesday, April 01, 2014

While I'm not quite an accidental landlord, since we got married we've had a rental property to manage. There are all sorts of issues with landlording, and I've covered many of the short-term solutions in a previous post. Aggressive Tax Avoidance for Real Estate Investors deals with longer term issues. Logistically, you can buy this version of the book from John T Reed's website, or you can buy a used 18th edition from Amazon. While there's unlikely to be much difference in content between the two editions, if you're running a rental business properly, there's no reason to cheap out since the book is tax deductible for your business.

A good measure of a specialist non-fiction book like this is the ROI. Within the first 3rd of the book I'd discovered that there was a certain approach that I'd not used because I'd succumbed to an old-wives tale and it would have saved 10X the price of the book. Live and learn.

The most useful part of the book is John T Reed's aggressiveness in approaching IRS issues. Basically, he tells you not to be afraid of tax courts, how to do research on tax issues, and how to fight the IRS in tax court if it comes down to it. This sounds really aggressive and it is. If you're renting out a room in your house, you're probably better off not being this aggressive, but if you have significant income from rental or run a multi-family rental property unit you want to take this approach as more conservative approaches would cost you significant amounts of money. John T Reed doesn't just assume this, but walks you through the Net Present Value/Expected Value Decision Tree for most of the approaches he espouses in this book. This is a very rational (one might say hyper-rational) approach to tax strategy and decision making as a landlord (or any other business owner), but you have to be capable of taking the mindset that Reed espouses. If you're easily stressed by the thought of an IRS audit, this is not the book for you, though you might want the managers you hire to read it and use it!

Reed not only walks through all the different types of tax courts, and the probability of the tax payer succeeding in winning the cases at the various courts, he also provides the probability of an audit, depending on the type of rental property you have and how much revenue and income you're generating. If you own any rental property, this type of information is invaluable and is worth the price of admission alone.

As a stalwart member of the 1%, Reed is definitely anti-Obama and anti-Democratic, and doesn't hesitate to write political comments throughout the book. I found this irritating, but tolerable given the usefulness of the information he provides.Then at the end of the book I came across something which just made me chuckle:

When you work at a job, you earn taxable income. Part of which, the government is entitled to confiscate. But if you work at increasing net worth---and refrain from selling the asset whose value you are increasing---the government has no right to confiscate any of the gain... It seems to me that if the taxes on work are too high---and they are---then you ought not to work for a living... (Page 180)

Sounds like a prescription for raising capital gains taxes and dividend taxes and reducing income taxes to me!

Anyway, if you own rental property that's more than just a room in your house, you need to buy this book. It will save you multiple times the cost of the book. If you run a business, you need this book just to understand the approach to taxes and how to do the NPV decision tree. Highly Recommended.