Learn Coding in the Spiral Way

编程学习曲线是螺旋式上升的

一开始,学习Python,写下了人生第一行代码 print "Hello World!"。然后发现我不知道怎样校验用户输入,Python是动态变量,你输入任何东西都可以。我愣是学不下去了。我总担心用户输入某个不靠谱的input导致代码爆炸。

然后改学Java。报名了网易的Java培训班,1300大元。显然,屁都没学到。内因显然因为自己起点太低,外因当然是网易的课程太垃圾。那是他们第一次开Java Web培训班,而且某些课程都是直接照本宣科,还找了几个不靠谱的小年轻,更要命的是,他们完全没有对学生的水平进行评估,不管水平咋样,都收钱!

后来,自己看了两本Linux相关的书,全英文的,一本《Linux Bible》,一本《Linux Command Line and Shell Scripting Bible》。把两本书看完了,全部代码敲了一次,还学会了安装Linux系统,这终于算是入门了。有感觉了。

于是,去红帽北京办公室应聘,没聘上。当然了,内因肯定是自己水平太低,客观原因也是红帽北京办公室属于乡镇企业的管理水平。我也就不多说了。

回来后,发现一个问题,我就算Linux学得好又怎样?我没有任何计算机相关学历,没有任何相关工作经验,什么都没有,别人凭什么相信你的简历?简历造假?不敢,真不敢。

于是,就学PHP吧。别管什么PHP是不是最好的语言了,简单啊。再加上自己已经好歹学过Java了,对所谓的控制流(其实就是if-else)等基本的东西还是了解了。于是就看书啊。

不得不说,PHP语法真简单。三下五去二,就看完了2本书,前后花了不到一周。然后就开始觉得自己能行了。其实傻的不了的。那个时候还非常楞,以为自己可以从头构建要给web framework从而达到学习的目的。傻逼死了。给人做一个微信公众号之后,发现傻逼了,还是不行啊。JavaScript更是不行。

回来就开始学PHP框架,也不想自己构建一个所谓web framework了。ThinkPHP太low逼了,Laravel太牛逼了,都学不来,于是学Yii吧。

当然,ThinkPHP不low逼。我还准备好好研究一下ThinkPHP5呢。
我只是想说,网上太多不靠谱言论在误人子弟。我全自学,真是走了太多弯路。

于是给人做了一个用户管理系统,统共管理了不到200人的一个小系统。还是在另一个比我多一年经验的小前辈的帮助之下做的,里面很多关键系统都是他做的(比我年轻10岁,但人家正经科班出身,而且多一年正经的Yii的经验,肯定比我强,所以称之为小前辈)。

来了美国之后,发现PHP不好找工作,于是自己学nodejs,从expressjs开始学起,自己构建了3个系统,其中一个是RESTful API,一个是小型网购网站,一个是一个信息展示类网站。

做完这三个,我发现啊,什么seesion啊,RESTful API啊,Log in功能,social login功能,Sign Up功能,jQuery这些,都尼玛熟得不能再熟了。expressjs确实是一个unopinionated/minimalist框架,尼玛啥都没有,就是一个骨架,啥都要你自己亲自写。我日了。当然,确实锻炼了能力,明白了内部机制。

然而风水轮流转,又开始写PHP了,而且是Yii2,结果半年不见,发现Yii2真亲切,啥都给你想好了,啥都有,你只需关注业务逻辑即可,你什么都不用考虑。好!真好!上面那些基础设施都有人帮你做好了,你也不用每次都重新实现一次。自己写一次,了解内部逻辑就行了,不用每次都还是重写,真墨迹。我一周做了一个系统出来,而且效果超级好。哈哈。

现在我们准备写一个并发量很高的系统,还是用Yii了,我们考虑还是用Yii比较好,而且我们也坚信,我们可以做得好。

好了,扯了这么多,我想表达的意思就是:

你不必每次都死磕。如果你在一门语言这里遇到阻碍了,不妨看看别的语言,别的框架,都是怎么玩的,你会豁然开朗,再回头看你遇到的问题,也许就有了全新的认识了。

所以我现在考虑,开始试试C++,也不一定要学的明白,就入个门,搞一搞一些小小项目,然后再回头看看Java和nodejs,说不定会有新的视角和新的进步。

Yii2-Gii Module Bug

Yii2 Gii生成代码的bug

基本上都用会用Gii生成代码,省事嘛,但是,最近一个项目有点恶心。

比如,在MySQL里建了一张表,一个字段是status,设置为booleanMySQL其实是把这个字段设置为tinyint的。

但在Gii里生成的model代码里的rules里,就成了string

这个小破bug,让我浪费了1个多小时,当然,我在提issue的时候,说浪费了我3小时

具体可以看这个: issue地址

Ubuntu Has No Internet Connection

Ubuntu 16.04 LTS 刚安装之后,连上网线,没有Internet连接,甚至每次重启都这样。

这是因为你在一个局域网内,需要从路由器申请动态IP地址

1
2
sudo dhclient -r
sudo dhclient `eth0`

注意,上面的这个eth0其实是有问题的,也就是说,不是每一个电脑的网卡都是eth0这个名字。所以你需要首先查看到这个的网卡的名字和状态。

1
ifconfig -a

里面一般会出来好几个,有一个loopback,不要那个,选另一个,替换上面的eth0

DSAA Experience 5 How to Use DSAA in Node.js and JavaScript

怎样在Nodejs和JavaScript日常写代码中应用data structure and algorithms?

今天遇到一个问题,就是注册的时候,要填写5个字段,但这5个字段每一个都有多个验证方式,比如用户名不能有特殊字符,不能有空格,不能首字符是下划线等等。每一个字段如果验证不通过,你还要返回相应的错误信息,请问怎么解决?注意,这些验证,如果不通过,肯定是自由排列组合哦。

经过好几天的思索,尝试着用素数这个来解决,

思路其实比较简单,就是你每个验证,用三元符,如果结果你想要的,就是1,如果不想要,就设置为某个素数,比如2,3,5,7之类。

然后结果相乘,然后对乘积进行判断:

  • 如果是1,说明一切OK,全部验证通过;
  • 如果不是1,先看是不是属于这几个素数,如果是,那就直接返回对应的错误信息
  • 如果不是1,而且乘积也不在预先设定的范围内,就分解质因子,然后就对应出来了

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const _ = require('lodash');

//预设一些不通过的原因,并设置key为素数
let map = new Map([
[2, "验证不通过,原因是xxxx"],
[3, "验证不通过,原因是xxxx"],
[5, "验证不通过,原因是xxxx"],
[7, "验证不通过,原因是xxxx"],
[11, "验证不通过,原因是xxxx"],
[13, "验证不通过,原因是xxxx"],
[17, "验证不通过,原因是xxxx"]
]);

//验证
let a = validator_a(args1) ? 1 : 2; //验证通过,就是1,不通过,就是某个素数
let b = validator_b(args2) ? 1 : 3;
let c = validator_c(args3) ? 1 : 5;
let d = validator_d(args4) ? 1 : 7;
let e = validator_e(args5) ? 1 : 11;
let f = validator_f(args6) ? 1 : 13;
let g = validator_g(args7) ? 1 : 17;

//验证结果进行乘积
let final = a * b * c * d * e * f * g;

//如果是1,说名一切OK,验证通过
if (final === 1){
return true;
}
//如果不是1
else {
//先看是不是在预设的结果里,如果是,说明就只有一个错误,给出这个错误即可
if (map.has(final)){
console.log(map.get(final));
return false;
}
else {
//如果不在预设的结果里,就分解质因数
let keys = [ ...map.keys()];
let errorMessage = [];
_.forEach(keys, (key)=>{
if (final % key === 0){ // 用%取余,如果是0,就说明是因子
errorMessage.push(map.get(final)); //取出对应的错误信息,push到msg里
}
});
console.log(errorMessage);
return false;
}

}

Hexo Evolution

Hexo有哪些需要改进的地方

首先、代码结构。目前的结构有问题,应该是把配置和源码分开。

源码和配置分开的的意思很简单。theme算配置了,而且theme会经常由作者更新,或者用户也要做个性化修改,所以不应该放在某个项目下面,而是应该放在项目的上一层,这样多个项目之间还可以共用此主题。

而且/public目录也应该单独出来,毕竟很多时候有Google Adsense等广告联盟需要对网址做验证,需要对最终生成的代码进行一些调整。这也算是一种配置,总之不是源码。如果能新增一个config目录,专门保存这些验证用的东西,hexo generate命令生成的时候统一生成到/public目录,也可以的。

其次、数据库加载问题

现在的数据库,是warehouse,一个json文件数据库,但这个问题是,显然性能是有问题的,毕竟json文件大了,解析起来就慢了。那么,既然每一篇文章最终都会生成一个目录,里面有一个index.html,那么,能否把json数据库拆成多个小json,/public目录下的contetn.json只是一个索引。

第三、plugin

目前我对此研究不多,但是,是否可以有类似的思路,分开管理。

第四、商业化

Hexo作为一个很不错的发表工具,那么能否做成平台呢?

比如,主题广场,吸引设计师来卖主题。为了防止盗版,这还要涉及到能否远程拉取主题,就是主题配置的时候,可以写一个url,而不用把主题文件拉取到本地。或者,可以下载到本地,但要加密,但hexo能读取到这个主题。

再比如,能否设计一个桌面客户端,从文本编辑,到生成静态文件,到购买域名,申请网络空间,最终发布出去,整个流程全部下来,点击几次按钮就可以,而完全不用命令行工具。这个可以的吧?

第五、平台化

如果上面这一步搞好了,可以吸收各种的静态网页生成工具,例如Ghost,Jekyll,Hugo等都弄进来。甚至把其他的CMS工具都集成进来。

Netlify都搞成了,都融到资了,这个idea为啥不行呢?

赚钱的方式很多,云服务,主题市场,图片市场,UI设计,SEO,等等吧。

第六、谁来用?

很多人、很多公司,以Google Adsense为生,他们可以多达100多个网址,因此有一个能够统一管理素材的发布工具,是非常有必要的。

中国也有很多人以各类公众号(不限于微信)为生,他们也很需要。

总之,自媒体吧。

© 2018 awesome.js All Rights Reserved.
Theme by hiero