关于v语言: 越是漂亮的语言,越会骗人

今天逛github trending, 发现榜首有个项目,叫做v语言。https://github.com/vlang/v 看了介绍,说这个语言非常牛X,几乎囊括了所有语言的长处。性能、编译耗时、内存使用都是碾压其他语言。 但是,要记住张无忌娘说过的一句话:越是漂亮的女人,越会骗人。 每一门语言都是由特定的使用场景,从而则决定了该语言在该场景下解决问题的能力。 不谈使用场景,而仅仅强调优点,往往是耍流氓。 你看JavaScript一出生,就是各种问题,但是在浏览器里,JavaScript就是能够一统天下,无人能够掩盖其锋芒。

2019-10-21 21:15:29 · 1 min · Eddie Wang

Jenkins 全局变量参考

docker The docker variable offers convenient access to Docker-related functions from a Pipeline script. Methods needing a slave will implicitly run a node {…} block if you have not wrapped them in one. It is a good idea to enclose a block of steps which should all run on the same node in such a block yourself. (If using a Swarm server, or any other specific Docker server, this probably does not matter, but if you are using the default server on localhost it likely will....

2019-10-15 22:34:01 · 8 min · Eddie Wang

Restful API 架构思考

1. 什么是REST? 表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文[1] 中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换(REST,英文:Representational State Transfer)是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。匹配或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。wikipdeia REST API 不是一个标准或者一个是协议,仅仅是一种风格,一种style。 RESTful API的简单定义可以轻松解释这个概念。 REST是一种架构风格,RESTful是它的解释。也就是说,如果您的后端服务器具有REST API,并且您(从网站/应用程序)向客户端请求此API,则您的客户端为RESTful。 2. REST API最为重要的约束 Client-Server 通信只能由客户端单方面发起,表现为请求-响应的形式 Stateless 通信的会话状态(Session State)应该全部由客户端负责维护 Cache 响应内容可以在通信链的某处被缓存,以改善网络效率 Uniform Interface 通信链的组件之间通过统一的接口相互通信,以提高交互的可见性 Layered System 通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。 Code-On-Demand 支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。 3. REST API HTTP方法 与 CURD REST API 使用POST,GET, PUT, DELETE的HTTP方法来描述对资源的增、查、改、删。这四个HTTP方法在数据层对应着SQL的插入、查询、更新、删除操作。 4. 状态码 1xx - informational; 2xx - success; 3xx - redirection; 4xx - client error; 5xx - server error. 5. RESTful架构设计 GET /users - get all users; GET /users/123 - get a particular user with id = 123; GET /posts - get all posts....

2019-10-15 22:32:40 · 1 min · Eddie Wang

掌握谷歌搜索高级指令

1. 谷歌搜索指令 2. 基本命令 符号 简介 语法 注意点 示例 + 包含A且必须包含B A +B A和+之间有空格 Maxwell +wills - 包含A且不包含B A -B A和+之间有空格 Maxwell -Absolom " " 完整匹配AB “AB” “Thomas Jefferson” OR 包含A或者B A OR B 或者 `A B` +-“OR 指令可以组合,完成更复杂的查询 beach -sandy +albert +nathaniel ~ 包含A, 并且包含B的近义词 A ~B github ~js .. 区间查询 AB之间 A..B china 1888..2000 * 匹配任意字符 node* java site: 站内搜索 A site:B filetype: 按照文件类型搜索 A filetype:B csta filetype:pdf 3....

2019-10-15 22:30:27 · 1 min · Eddie Wang

如何成为从培训班里出来的牛人?

1. 培训行业的现状和问题 进入培训班学习可能有一下两个原因: 想转行 学校里学的东西太过时了,需要深入学习本行业的知识 培训的行业的核心思想都是:如何快速的让你能够面试通过 老师教的东西大多是一些面试必须要问的一些知识,做的项目也应该都是市面上比较火的项目。这么做的不利之处有以下几点: 局限性:知识局限于教师的授课范围,知识面窄 扩展性:快餐式学习管饱不管消化,很多知识吸收不高,无法举一反三 系统性:没有系统的整体知识体系 所以这些因素可能会让用人不太喜欢培训出来的应聘者,而往往希望刚毕业的应届生。但是,培训行业出来的应聘者,也不乏国士无双的牛逼人物。 2. 如何成为培训出来的牛人? 无论在哪个行业,自学都是必不可少的事情。毕业不是学习的终点,而应该是起点。你和技术牛人之间的距离或许并不遥远,可能只是一个芭蕉扇的距离。 2.1. 读权威书籍,扎实理论基础 每个行业都有一些经历时间考验而熠熠生辉的经典数据,例如在前端行业。我认为下面两本书是必须要读完一本的。 基础 JavaScript高级程序设计 JavaScript权威指南 进阶 JavaScript语言精粹 JavaScript忍者秘籍 You Don’t Know JS JS函数式编程指南 2.2. 动手能力,闲话少说,放码过来 各种demo啊,效果啊,有时间自己都可以撸一遍,放在github上,又不收钱,还能提高动手能力。 2.3. 数据结构 差劲的程序员操心代码,牛逼的程序员操心数据结构和它们之间的关系。 一一Linus Torvalds, Linux 创始人 优秀的数据结构,可以节省你80%的编码时间。差劲的数据结构,你需要花大量的时间去做各种高难度动作的转换,一不小心,数据库就要累的气喘如牛,停机罢工。 2.4. 知识积累,从博客开始 如果你已经在某个行业工作个两三年,一篇像样的博客都没有。 那我觉得你可能是个懒人。因为几乎很少写东西。 我觉得你可以是个自私的人。因为做计算机行业的,谁没有用过别人造的轮子。即使你没有造轮子的能力,即使你给出一个问题应该如何解决的,至少你对计算机行业也作出了你的贡献。 2.5. 互联网的基石 TCP IP 计算机行业是分层的,就像大海一样,海面上的往往都是惊涛骇浪,暴风骤雨,各种框架层出不穷,争奇斗艳。当你深入海底,你会发现,那里是最平静的地方。而TCP IP等协议知识,就是整个互联网大航海时代的海底。互联网行业如此多娇,引无数框架竞折腰。浪潮之巅者成为行业热点,所有资源会喷薄涌入,失去优势被替代者,往往折戟沉沙铁未销。总之,越是上层,竞争越激烈,换代越快。 但是底层的TCP/IP之类的知识,往往几十年都不会有多大的改变。而且无论你从事什么语言开发,只要你涉及到通信了,你就需要TCP/IP的知识点,不过你不清楚这些知识点,你可以随时给自己埋下定时炸弹。 这个错误我也犯过,你可以看我的犯错记录:哑代理 - TCP链接高Recv-Q,内存泄露的罪魁祸首。 关于TCP/IP, 推荐一下书籍 基础 图解TCP/IP : 第5版 图解HTTP 进阶 HTTP权威指南 2.6. 工具的威力 你用刀,我用枪,谁说谁能打过谁。原始社会两个野蛮人相遇,块头大的,食物多,可以拥有更多的繁衍后代的权利。但是当一个野蛮人知道用刀的威力时,他就不会害怕胳膊比较粗的对手了。 举例来说,前端开发免不了有时需要一个静态文件服务器,如果你只知道阿帕奇,那你的工具也太落后了。你可以看看这篇文章:一行命令搭建简易静态文件http服务器 当你想要更偷懒,想要不安于现状时,你会找到更多的厉害的工具。 2.7. 英语阅读能力 IT行业还有一个现象,就是看英文文档如喝中药一般,总是捏着鼻子也看不下去。看中文文档放佛如喝王老吉,消火又滋润。...

2019-10-15 22:25:56 · 1 min · Eddie Wang

你不知道的专业化道路

从分工到专业化 分工提高生产效率,专业化提高个人价值。很多人都认为,一旦我们进入了某一行,我们就应该在这个行业深挖到底。例如我是做前端的,我就会去学习各种前端的知识点,各种层出不穷的框架。我总是在如饥似渴的希望自己能够保持在深入学习的状态,我不想哪一天自己突然out了。 专业化的危机在哪? 以前我在上初中的时候,就稍稍的学习了一点点ActionScript的知识。可能有些人不知道ActionScript是干嘛的,它是在flash的环境中工作的,可以在flash里做一些动画和特效之类的。那时候flash是很火的技术,几乎所有的网站都是有flash的,所以会ActionScript语言的程序员,工资都不低。 但是,你现在还听过什么ActionScript吗? 它的宿主环境flash都已经被淘汰了,皮之不存毛将焉附。可想而知,flash的淘汰,同时也让时长淘汰了一批在ActionScript的专家。 所以,专业化并不是一个安全的道路。准确来说,世界上本来就没有安全的路。大多说认为这条路安全,是因为他们总是以静态的眼光看这条路。说点题外话,如果你书读多了,你会发现,其实一直在你思想里的那些观念,那些故事,往往都是忽悠人的。你可以看看我的一个书单:2018年我的阅读计划。 从企业的角度考虑,每个老板都想招在某一方面专家。但是从个人的角度考虑,如果你在专业化的道路钻研的非常深,或许有时候你应该放慢脚步,找个长椅,坐着想一想,如果你前面马上就是死路了,你应该怎么办? 我们应该怎么办? 世界上没有安全的路,世界上也没有一直安全的职业。一个职业的火爆,往往因为这个行业的火爆。而永远也没有永远火爆的行业,当退潮时,将会有大批的弄潮儿会搁浅,干死,窒息…… 除去环境造成的扰动,人的身体也会随着年龄会慢慢老化。 你可以想象一下,当你四十多岁时。那些新来的实习生,比你要的工资低,比你更容易接受这个行业的前沿知识,比你更加能加班,比你能力更强时,比你更听话时。你的优势在哪里?我相信到那时候,你的领导会毫不犹豫开了你。 在此,你要改变。我给出以下几个角度,你可以自行延伸。 开始锻炼身体 这是一切的基石 搞一搞副业,学习一下你喜欢的东西,你可以去深入学学如何做菜,如何摄影等等 学习理财知识,这是学校从没教你的,但是却是非常重要的东西 读书,越多越好 参考文献 专业主义 日 大前研一 富爸爸穷爸爸 罗伯特·清崎 / 莎伦·莱希特 国富论 英 亚当·斯密 失控 乌合之众 法 古斯塔夫·勒庞 未来世界的幸存者 阮一峰 新生 七年就是一辈子 李笑来

2019-10-15 22:25:18 · 1 min · Eddie Wang

我苦苦寻找诡异的bug原因,其实是我的无知

1. 问题1:chosen插件无法显示图标 问题现象在我本地调试的时候,我使用了一个多选下拉框的插件,就是chosen, 不知道为什么,这个多选框上面的图标不见了。我找了半天没有找到原因,然后我把我的机器的内网地址给我同事,让他访问我机器,当它访问到这个页面时。他的电脑上居然显示出了这个下拉框的图标。 这是什么鬼?, 为什么同样的代码,在我的电脑上显示不出图标,但是在他的电脑上可以显示。有句名言说的好:没有什么bug是一遍调试解决不了的,如果有,就再仔细调试一遍。于是我就再次调试一遍。 我发现了一些第一遍没有注意到的东西媒体查询,就是在css里有这样的语句: @media 从这里作为切入口,我发现:媒体查询的类会覆盖它原生的类的属性 由于我的电脑视网膜屏幕,分辨率比较高,触发了媒体查询,这就导致了媒体查询的类覆盖了原生的类。而覆盖后的类,使用了chosen-sprite@2x.png作为图标的背景图片。但是这个图片并没有被放在这个插件的目录下,有的只有chosen-sprite.png这个图片。在一般情况下,都是用chosen-sprite.png作为背景图片的。这就解释了:为什么同事的电脑上出现了图标,但是我的电脑上没有出现这个图标。 总结: 如果你要使用一个插件,你最好把这个插件的所有文件都放在同一个目录下。而不要只放一些你认为有用的文件。最后:媒体查询的相关知识也是必要的。 2. 问题2:jQuery 与 Vue之间的暧昧 jQuery流派代表着直接操纵DOM的流派,Vue流派代表着操纵数据的流派。 如果在项目里,你使用了一些jQuery插件,也使用了Vue,这就可能导致一些问题。 举个例子: <!DOCTYPE html> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.4.4/vue.js"></script> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </head> <body> <div id="app"> 姓名 <input type="text" v-model="userName"> <br/> 年龄 <input type="text" id="userAge" v-model="userAge"> <br/> </div> <script type="text/javascript"> new Vue({ el: '#app', data: { userName: '', userAge: 12 } }); $('#userAge').val(14); </script> </body> </html> 在页面刚打开时:姓名输入框是空的,年龄输入框是14。但是一旦你在姓名输入框输入任何字符时,年龄输入框的值就会变成12。 如果你仔细看过Vue官方文档,你会很容易定位问题所在。 v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。你应该通过 JavaScript 在组件的 data 选项中声明初始值。---Vue官方文档 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子。...

2019-10-15 22:22:24 · 1 min · Eddie Wang

一行命令搭建简易静态文件http服务器

简易服务器:在命令执行的所在路径启动一个http服务器,然后你可以通过浏览器访问该路径下的所有文件。 在局域网内传文件,或者自己测试使用都是非常方便的。 1. 基于python 1.1. 基于Python2 python -m SimpleHTTPServer port > python -m SimpleHTTPServer 8099 Serving HTTP on 0.0.0.0 port 8099 ... 127.0.0.1 - - [24/Oct/2017 11:07:56] "GET / HTTP/1.1" 200 - 1.2. 基于python3 python3 -m http.server port > python3 -m http.server 8099 Serving HTTP on 0.0.0.0 port 8099 (http://0.0.0.0:8099/) ... 127.0.0.1 - - [24/Oct/2017 11:05:06] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [24/Oct/2017 11:05:06] code 404, message File not found 127....

2019-10-15 22:21:02 · 1 min · Eddie Wang

python实战 报纸分词排序

1. 环境 win7 64位 python 3.5 2. 目标 抓取一篇报纸,并提取出关键字,然后按照出现次数排序,用echarts在页面上显示出来。 3. 工具选择 因为之前对nodejs的相关工具比较熟悉,在用python的时候,也想有类似的工具。所以就做了一个对比的表格。 功能 nodejs版 python版 http工具 request requests 中文分词工具 node-segment, nodejieba(一直没有安装成功过) jieba(分词准确度比node-segment好) DOM解析工具 cheeio pyquery(这两个工具都是有类似jQuery那种选择DOM的接口,很方便) 函数编程工具 underscore.js underscore.py(underscore来处理集合比较方便) 服务器 express flask 4. 开始的噩梦:中文乱码 感觉每个学python的人都遇到过中文乱码的问题。我也不例外。 首先要抓取网页,但是网页在控制台输出的时候,中文总是乱码。搞了好久,搞得我差点要放弃python。最终找到解决方法。 解决python3 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xXX’ in position XX 过程很艰辛,但是从中也学到很多知识。 import io import sys sys.stdout = io.TextIOWrapper(sys.stoodout.buffer,encoding='gb18030') 5. 函数式编程: 顺享丝滑 #filename word_rank.py import requests import io import re import sys import jieba as _jieba # 中文分词比较优秀的一个库 from pyquery import PyQuery as pq #类似于jquery、cheerio的库 from underscore import _ # underscore....

2019-10-15 21:59:23 · 2 min · Eddie Wang

代码整洁之道 - 有意义的命名

在小朱元璋出生一个月后,父母为他取了一个名字(元时惯例):朱重八,这个名字也可以叫做朱八八。我们这里再介绍一下,朱重八家族的名字,都很有特点。 朱重八高祖名字:朱百六; 朱重八曾祖名字:朱四九; 朱重八祖父名字:朱初一; 他的父亲我们介绍过了,叫朱五四。 取这样的名字不是因为朱家是搞数学的,而是因为在元朝,老百姓如果不能上学和当官就没有名字,只能以父母年龄相加或者出生的日期命名。(登记户口的人一定会眼花)–《明朝那些事儿》 那么问题来了,朱四九和朱百六是什么关系? 你可能马上懵逼了。所以说:命名不仅仅是一种科学,更是一种艺术。 1. 名副其实 // bad var d; // 分手的时间,以天计算 // good var daysAfterBrokeUp; // 分手以后,以天计算 2. 避免误导 // bad var nameList = 'wdd'; // List一般暗指数据是数组,而不应该赋值给字符串 // good var nameList = ['wdd','ddw','dwd']; // // bad var ill10o = 10; //千万不要把i,1,l,0,o,O放在一起,傻傻分不清楚 // good var illOne = 10; 3. 做有意义的区分 // bad var userData, userInfo; // Data和Info, 有什么区别????, 不要再用data和info这样模糊不清的单词了 // good var userProfile, userAcount 4. 使用读得出来的名称 // bad var beeceearrthrtee; // 你知道怎么读吗? 鼻涕阿三?? // good var userName; 5....

2019-10-15 21:58:30 · 1 min · Eddie Wang