In 2012, even I wrote a 150-page eBook about severance package negotiations that still regularly sells about ~35 copies a month at $85 each (2nd edition for 2017) without any effort. In order to generate $2,975 a month or $35,700 a year in passive income as I do now, I would need to invest $892,500 in something that generates a 4% yield! To earn $10,000 a year in passive income would therefore need roughly $250,000 in capital.
Stocks (shares) paying dividends are typically a reliable source of income but they have higher risk of capital losses than cash and bonds. So, it’s wise not to chase yield indiscriminately.  The 10 highest yielding stocks on the ASX 200 (the 200 largest companies in Australia) are shown in the table below.  But their share price performance on average over the last year has been underwhelming, as shown in the far right column:
If the income is for personal services performed partly in the United States and partly outside the United States, you must make an accurate allocation of income for services performed in the United States. In most cases, other than certain fringe benefits, you make this allocation on a time basis. That is, U.S. source income is the amount that results from multiplying the total amount of pay by the fraction of days in which services were performed in the U.S. This fraction is determined by dividing the number of days services are performed in the United States by the total number of days of service for which the compensation is paid.
I wish I had more time to put into real estate. Given the run up since 2012, I may even be interested in selling my condo that I currently rent out. I need to get it appraised to really see what it’s worth, but I think conservatively it’s gone up ~50%, although rent is probably only up ~10% or so. I am bullish on rents going up in the future… mostly in line with inflation, or perhaps even slightly faster due to constricted credit and personal income growth which should provide a solid supply of renters. At this point, I just don’t want to manage the property. I’ll probably look into a property manager as my time is likely worth turning it into a nearly passive investment.
!function(e){function n(t){if(r[t])return r[t].exports;var i=r[t]={i:t,l:!1,exports:{}};return e[t].call(i.exports,i,i.exports,n),i.l=!0,i.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,r,o){for(var s,a,u=0,l=[];u1)for(var t=1;tf)return!1;if(h>c)return!1;var e=window.require.hasModule("shared/browser")&&window.require("shared/browser");return!e||!e.opera}function a(){var e=o(d);d=[],0!==e.length&&l("/ajax/log_errors_3RD_PARTY_POST",{errors:JSON.stringify(e)})}var u=t("./third_party/tracekit.js"),l=t("./shared/basicrpc.js").rpc;u.remoteFetching=!1,u.collectWindowErrors=!0,u.report.subscribe(r);var c=10,f=window.Q&&window.Q.errorSamplingRate||1,d=[],h=0,p=i(a,1e3),m=window.console&&!(window.NODE_JS&&window.UNIT_TEST);n.report=function(e){try{m&&console.error(e.stack||e),u.report(e)}catch(e){}};var w=function(e,n,t){r({name:n,message:t,source:e,stack:u.computeStackTrace.ofCaller().stack||[]}),m&&console.error(t)};n.logJsError=w.bind(null,"js"),n.logMobileJsError=w.bind(null,"mobile_js")},"./shared/globals.js":function(e,n,t){var r=t("./shared/links.js");(window.Q=window.Q||{}).openUrl=function(e,n){var t=e.href;return r.linkClicked(t,n),window.open(t).opener=null,!1}},"./shared/links.js":function(e,n){var t=[];n.onLinkClick=function(e){t.push(e)},n.linkClicked=function(e,n){for(var r=0;r>>0;if("function"!=typeof e)throw new TypeError;for(arguments.length>1&&(t=n),r=0;r>>0,r=arguments.length>=2?arguments[1]:void 0,i=0;i>>0;if(0===i)return-1;var o=+n||0;if(Math.abs(o)===Infinity&&(o=0),o>=i)return-1;for(t=Math.max(o>=0?o:i-Math.abs(o),0);t>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=n),r=0;r>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(t=n),r=new Array(s),i=0;i>>0;if("function"!=typeof e)throw new TypeError;for(var r=[],i=arguments.length>=2?arguments[1]:void 0,o=0;o>>0,i=0;if(2==arguments.length)n=arguments[1];else{for(;i=r)throw new TypeError("Reduce of empty array with no initial value");n=t[i++]}for(;i>>0;if(0===i)return-1;for(n=i-1,arguments.length>1&&(n=Number(arguments[1]),n!=n?n=0:0!==n&&n!=1/0&&n!=-1/0&&(n=(n>0||-1)*Math.floor(Math.abs(n)))),t=n>=0?Math.min(n,i-1):i-Math.abs(n);t>=0;t--)if(t in r&&r[t]===e)return t;return-1};t(Array.prototype,"lastIndexOf",c)}if(!Array.prototype.includes){var f=function(e){"use strict";if(null==this)throw new TypeError("Array.prototype.includes called on null or undefined");var n=Object(this),t=parseInt(n.length,10)||0;if(0===t)return!1;var r,i=parseInt(arguments[1],10)||0;i>=0?r=i:(r=t+i)<0&&(r=0);for(var o;r