Sunday, November 5, 2017

2017 Nov 投资设想和决策 investment idea and decision

有感于近期一系列的信息,咱终于第一次有了投资房子的想法。
比如:未来三年加拿大会接纳更多的投资移民。
以前咱都是看不上投资房子的。

虽然我较大数额的长期价值投资优质企业和S&P500强指数,年回报在 20% 以上,
但是还是没法让我们的整体资产升值追上3%的通货膨胀率。

原因就是房子占了大头。

跟两位德高望重的智囊请教以后,落实了具体执行计划。
包括房子的价位范围和出手时机。

您作为我博客的忠实读者,可以分享本人的投资组合。

30% 特斯拉,- 高风险。
30% 自己组合的一线大厂基金(亚马逊,腾讯,谷歌,Facebook 各占一份)- 中等风险。
40% SP500强指数。- 低风险。


中国篇。

 1. 在这个时代,去一味地争论自己所处的政治经济环境是否是客观最佳是一件意义不大的事情,不如把时间花在为自己和自己关心的人争取更“多样化”选择权利的事情上,全球化的视野,不仅仅是说去美国游学来中国吃菜去日本买抽水马桶。
2. 郭广昌先生说过: 坚定看好中国中产阶级崛起并持续投资与之密切相关的衣食住行消费升级的优质企业。深以然之。

买股票买指数其实比买理财产品更加安全,关键是你要有耐心,要忽略波动因素。

茅台,老板电器,比亚迪,格力空调,平安保险,青岛啤酒等等。
中国优质企业,可以考虑投资这些企业。



股市有风险,投资需谨慎。



你想住在哪里呢?Where is your favourite living place?

你想住在哪里呢?

维多利亚只有两个季节,半年夏天和半年冬雨天。

经历十二个漫长到阴雨湿冷季节以后,咱想去温暖的南方,晒晒身上的湿气。

基本筛选条件是:气候好,治安好,经济发达。
南美洲除了古巴,治安都很差。
非洲经济落后。
第一批找到三个候选地:澳大利亚,加州 圣地亚哥 和 夏威夷。

随后被朋友们否决了澳大利亚。
原因是 ... ...。
圣地亚哥也在被迫接收大批穆斯林难民,治安每况愈下。

所以现在剩下到候选地只有夏威夷了。

昨天在朋友家聚会,新生一个方案,不必彻底搬家。
每年冬天12月和一月能够在夏威夷 或者 古巴,远程工作两个月。
生活就美好许多了。

咱现在目标就是,投资自己,修炼提高,然后可以找到许多远程工作。


根据 Hacker News Hiring Trends 排名,
前三位技术是:React, Python, JavaScript.
我决定猛攻 React + JavaScript.

Fyi, here is the Trending Developer Skills.
Top 3 are ReactPython and JavaScript.

https://medium.freecodecamp.org/trending-developer-skills-based-on-my-analysis-of-ask-hn-whos-hiring-26c02a3ca1fd

Sunday, June 11, 2017

JavaScript full-stack developer self training path

Here is my JavaScript full-stack developer self training path.

Book,
  • Professional JavaScript for Web Developers (3rd Edition, 2011, a little outdated )
    • Chinese version: JavaScript高级程序设计
  • Eloquent JavaScript http://eloquentjavascript.net/
    (This is better. I'd read this one instead of above 1st book if I could do it again.)
    (第一本书稍显臃肿,做参考书不错。如果可以重来,咱推荐这本书,适合初级快速入门.)
online course: freeCodeCamp ,
code skill and technique
Node.js
React


ES6
Data Structure

Prepare interviews, and get the job. Read 2 books.

Lynda.com, take online training courses.
  • Become a Front-End Web Developer, 37h
    url, https://www.lynda.com/learning-paths/Web/become-a-front-end-web-developer
  • Become a Web Developer, 31h
    url, https://www.lynda.com/learning-paths/Web/become-a-web-developer
  • Become a React Developer, 14h #t1
    url, https://www.lynda.com/learning-paths/Web/become-a-react-developer
    • Building and Deploying a Full-Stack React Application 4h #Relay #t3
      url, https://www.lynda.com/React-js-tutorials/Building-Deploying-Full-Stack-React-Application/558648-2.html , #Relay #GraphQL
  • React Native
  • Relay and GraphQL
    • Learning GraphQL #t2
      url, https://www.lynda.com/JavaScript-tutorials/Learning-GraphQL/574714-2.html

Comment:

GitHub 开源项目代码,博客,LeetCode/CodeWars 升级,等等这些,都只能帮你赢得面试,却是很难(基本不可能)帮你拿到一个 Offer。 要想找到好工作,还必须得通过白板算法面试。 从此咱立志成为高级白板面试工程师

另一个因素,很多流行的语言和框架迭代更新速度快。
一位干了五年的前硅谷前端工程师,短短5年,经历了3个主流技术框架,Backbone and JQuery, Angular 1 接下来是 React.
他曾经是响当当的 Angular 1 高级工程师, 可是现在已经少有人对 Angular 1 高级工程师感兴趣了。

然而,数据结构和算法却是相对恒久的。

我1993年大学毕业接触到的数据结构,现在依然垄断了各大软件公司的白板面试。
因此我还是要立刻行动,成为高级白板算法工程师
(博客原文,Whiteboard Interviews Suck, Get Good at Them Anyway. 
https://www.alexkras.com/whiteboard-interviews-suck-get-good-at-them-anyway)

Solution (divide to achievable tasks) and Schedule. * 花时间做规划. * 大段时间做单一任务;减少碎片化的时间;避免任务切换. * 形成日常惯例,减少意志力的损耗. * 有效地娱乐休息.
https://www.zhihu.com/question/28880482/answer/176343416 … ~ 高效人生.


Reference:

Monday, June 5, 2017

Permutation in JavaScript

// Permutations

// Option 1, fix prefix, add a letter to the end of current space.


Source code:

function get_suffix(surffix, charIdx) {
  var arr = surffix.split("");
  arr.splice(charIdx, 1);
  var newSurffix = arr.join("");
  return newSurffix;
}

function permSuffix (str) {
var myArr = [];
var permNext = function f_permNext(prefix, surffix, initStr) {
 //call example:  permNext("","abc","abc");
 var newPrefix = "",
   newSurffix = "";
 var strLen = initStr.length;
 var i = 0;
 console.log("start func: " + prefix, i, surffix);
 if (prefix.length === strLen) {
   myArr.push(prefix);
   console.log("** Combined: " + prefix);
   return;
 }
 for (i = 0; i < surffix.length; i++) {
   newPrefix = prefix + surffix[i];
   newSurffix = get_suffix(surffix, i);
   console.log(newPrefix, i, newSurffix);
    f_permNext(newPrefix, newSurffix, initStr);
 }
};

permNext("", str, str);
return myArr.length;
}

permSuffix("123");

> 6

// options 2,  Introduce and insert a letter to the space of prefix.



Source code:

function introChar(targetStr, chr) {
var arr = [];
var strArr = [];
for (var i=0; i<=targetStr.length; i++) {
strArr = targetStr.split("");
strArr.splice(i, 0, chr);
arr.push(strArr.join(""));
}
return arr;
}

introChar("abc", "1");

function permInsert (str) {
var myArr = [];
var permIntro = function f_intro (arr, pos, permStr) {
console.log(pos, arr, permStr);
var len = permStr.length;
if (pos >= len) {
myArr = myArr.concat(arr);
console.log(arr);
return;
}
if (arr.length === 0) {
arr = introChar("", permStr[0]);
pos++;
}
chr = permStr[pos];
pos++;
arr.forEach( function(val) {
var plusCharArr = introChar(val, chr);
console.log(plusCharArr);
f_intro(plusCharArr, pos, permStr);
});
};
permIntro([], 0, str);
return myArr.length;
}

permInsert("abcde");

> 120

// Reference,  arr is reference type, the paramenter is a link,
// update in a function, update outside arr elements value too.

var yiArr = [7,8,9];

function cut1 (pArr) {
lArr = pArr.slice();
lArr.splice(1, 1);
return lArr;
}

cut1(yiArr);

yiArr;

Monday, May 29, 2017

Pig Latin with RegExp in JavaScript

For Pig Latin exam in Intermediate Algorithm Scripting of https://www.freecodecamp.com/challenges/pig-latin

Here is the normal solution,

function translatePigLatin(str) {
var csntArr = ["b", "c", "d", "f", "g", "h", "i", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "x", "z", "w", "y"];
var strArr = str.split("");
var newStr = "";
var i=0;
var leadCsntArr = Array();

if (csntArr.indexOf(strArr[i]) >= 0) {
while (csntArr.indexOf(strArr[i]) >= 0) {
leadCsntArr.push(strArr[i]);
++i;
}
newStr = str.substr(i) + leadCsntArr.join("") + "ay" ;
} else {
newStr = str + "way" ;
}

  return newStr;
}

translatePigLatin("consonant");

Here is the RegExp solution, it is concise and simple.  ^_^

function translatePigLatin(str) {
  var newStr = "";

  resArr = str.match(/[bcdfghijklmnpqrstvxzwy]*/);
  
  if (resArr[0] === "") {
    newStr = str + "way" ;
  } else {
    newStr = str.substr(resArr[0].length) + resArr[0] + "ay" ;
  }
  return newStr;
}

translatePigLatin("consonant");