> 一份2021年02月26日的信息流提炼 ### 每天学点Golang #### Go 1.16来了 原文:[Go 1.16 is Launched](https://medium.com/codex/go-1-16-is-launched-9ae3cf06703a) - 优化对macOS arm64的支持(M1) - 默认启用Go Module - 使用`go install` 命令下载而不影响mod文件依赖 - 不允许使用相对路径 - 提高Race Debugger的准确性 - 标准库更新 - `io/ioutil` API迁移至 `io/os` - 引入了一个新的文件只读抽象相关接口`io/fs`包,以及其测试包`test/fstest` - 支持embed包,在编译过程中通过`//go:embed`命令嵌入文件,然后访问。这样一来,将数据文件和Go代码一起编译成二进制文件就变得更加简单,部署效率也更高。 - 在测试方法的`goroutine`中必须使用`Error`方法抛出错误,而`Fatcal`方法则被排除。 - 包改动:`crypto`,`Encoding`(json、xml和asn1) - `Flag`增加了一个新的`Func`函数,使读取选项更加方便。 - 提供了一个`Logger`默认`log.Default`。 - `net/http`包中的`StripPrefix`函数支持striping`Path`和`RawPath`。 - 在性能上也有改进。例如,`path/filepath`包中新的`WalkDir`函数比`Walk`函数更快,`strconv.ParseFloat`的速度提高了2倍。 - 通过支持`Unicode 13.0.0`,我们使用比如`/U0001F972`,`/U0001F90C`的表情符号,从`U+30000`到`U+3FFFF`。 ```go // 下载go.1.16 $ go get golang.org/dl/go1.16 $ go1.16 download ``` ※其他参考 附录:snippets ### 每天学点Web #### 常见的Nginx错误配置会让你的Web服务器受到攻击 [Common Nginx misconfigurations that leave your web server open to attack](https://blog.detectify.com/2020/11/10/common-nginx-misconfigurations/) - **缺少 root location** - e.g. /usr/share/nginx/html. /someapp/public/, /var/www/html - 危害:可能会暴露默认的`/etc/nginx`下的配置 - **斜杠结尾( Off-By-Slash )** ``` location /api { proxy_pass http://apiserver/v1/; } ``` - 一般web server会解释`http://apiserver/v1//user` 为`http://apiserver/v1/user` 所以没有问题 但是当访问 `http://server/api../` 时,可以从`http://apiserver/v1/../`获得 `http://apiserver/`例如,它可能会导致Apache server-status被暴露在URL `http://server/api../server-status`中,或者它可能会使原本不打算公开访问的路径被访问。 - **不安全的变量使用** - 一些框架、脚本和Nginx配置不安全地使用Nginx存储的变量。这可能导致XSS、绕过HttpOnly保护、信息泄露等问题,在某些情况下甚至会导致RCE。 比如 `fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;`主要的问题是,Nginx会发送任何URL到PHP解释器,以.php结尾,即使该文件不存在于磁盘上。这是许多Nginx配置中常见的错误。 - 使用$uri可导致CRLF注入 - **原始后台响应读取** - 通过`proxy_pass` Nginx可以理解后台传过来的HTTP消息,返回一个自定义的错误页面,从而隐藏错误消息头与信息。 - 如果不是这种HTTP响应,则可以设定`proxy_intercept_errors`与`proxy_hide_header`进行对应。 - **uymerge_slashes设置为关闭** - merge_slashes指令默认设置为 "on",这是一种将两个或多个正向斜线压缩成一个的机制,所以///会变成/。如果Nginx被用作反向代理,而被代理的应用程序对本地文件的包含很脆弱,那么在请求中使用额外的斜线可能会给它留下利用的空间。 #### Vue SEO 原文:[Vue SEO的四种方案](https://juejin.cn/post/6933089780389380110#heading-9) - Nuxt SSR服务器渲染 (客户端执行的对应:`if(process.browser){console.log(window)}`) - Nuxt 静态应用部署 (动态路由参数多的话不适用) - 预渲染prerender-spa-plugin ### 每天学点数据科学 看了**Alteryx**的讲座,**Alteryx**是一个数据分析/预测的工具。 Demo演示了一次收入预测的workflow构建流程。 在数据准备阶段跟大多数ETL工具的使用流程一样。(Join, Select, Filter, Sort) 在数据准备好后有一个叫CrossTab的工具可以简单进行PIVOT的工作。 这样简单生成了时间序列的数据,再连上指数平滑法的分析工具就可以进行预测结果。 在Demo中用到了下面两种模型。 #### 指数平滑法 Exponential Smoothing 指数平滑是一种经验法则,用于使用指数窗口函数平滑时间序列数据。 在简单的移动平均中,过去的观测值的权重是相等的,而指数函数则用于分配随时间递减的指数权重。 ```math $$ s_t = \alpha x_t + (1-\alpha)s_{t-1} = s_{t-1} + \alpha(x_t - s_{t-1}) $$ ``` St是预测值,α 是系数,xt是前回实绩,s t-1 是前回预测值。 计算出前一次的实际值与预测值的偏离程度,然后将得到的修正值与前一次的预测值乘以一定的系数α相加或相减,得出当前的预测值。 关键的一点是,实际值只用来计算修正值,以前的预测值作为本次预测值的基础。 这就避免了不寻常的实际值带来的太多影响。 #### ARIMA模型 ARIMA模型是时间序列数据的d阶差分序列,用ARMA模型表示。 我们还可以将模型表示为ARIMA(p,d,q)。 这是ARIMA模型的简单表示。 可以看到,方程的右侧是AR和MA模型的组合。 ```math $$ \begin{equation*} y_t - y_{t-d} = c + \epsilon_t + \sum_{i=1} ^ {p} ????_iy_{t-i} + \sum_{i=1}^{q} \theta_i \epsilon_{t-i} ...(1) \end{equation*} $$ ``` ### 其他值得阅读 - 英文 | AI无处不在,未来的世界是每个人都可以利用AI编程。[A.I. Here, There, Everywhere](https://www.nytimes.com/2021/02/23/technology/ai-innovation-privacy-seniors-education.html?ml_subscriber=1629191036486030739&ml_subscriber_hash=y1p1&utm_source=newsletter&utm_medium=email&utm_campaign=ai_news_quantum_computing_reinventing_programming_mike_loukides&utm_term=2021-02-25) - 播客: [envisions a day](https://www.eye-on.ai/podcast-033) - 牛津大学创业公司的AI自动测试系统:[Diffblue](https://www.diffblue.com/) - 英文 | [A Simple Way to Reduce Cognitive Bias](https://news.ycombinator.com/item?id=26235812) - HN评论 ```markdown 让我想起了大卫・福斯特・华莱士的著名演讲...... 你应该努力接受教育的真正原因是控制和理解你的思想? 这是很难的--我经常发现自己处于自动运行状态,几个小时后才发现,甚至没有注意到我的工作或试图解决问题的地方不对。或者更糟糕的是,被偏见困住,影响心情。 > 我们应该得到的真正重要的思想教育,不是真正关于思考的能力,而是关于选择思考什么的问题。 > We’re supposed to get in a place like this isn’t really about the capacity to think, but rather about the choice of what to think about. > 这才是真正的自由。接受教育,了解如何思考。另一种则是无意识,默认配置的老鼠赛跑,持续痛苦的获得与失去。 > That is real freedom. That is being educated, and understanding how to think. The alternative is unconsciousness, the default setting, the rat race, the constant gnawing sense of having had, and lost, some infinite thing. ``` [David Foster Wallace: This is Water](https://www.butwhatfor.com/david-foster-wallace-this-is-water/) - 英文 | 我第一次作为技术领导学到的事。 [6 Crucial Things I Learnt as a First Time Technical Leader]() - 为将来做打算 - 专注于最有价值的事 - 用视觉辅助工具为你的沟通加分 - 培养影响能力 > 对于任何技术领导者来说,**导师**都是一个关键的角色。 > > 如果你想成为一个有效的技术领导者,你需要掌握**影响的艺术**。 > > "影响技能是一种能力,能够让人们接受你对某一主题的思考方式,而不需要强制或胁迫,同时承认他们的意见。" > > 以一种非威胁性的方式传达你的观点。这应该让人感觉像一场对话 。 - 寻求反馈 - 中文 | [如何变得更聪明?](https://www.huxiu.com/article/411607.html?f=rss) - 采取一个根本性的策略,就是: **先整体,后局部。** - 培养出一个更有序的大脑: 多去进行**自下而上的信息整合**。 - 大多数人最常犯的毛病是什么呢?就是**只顾着“收集”,而从来不去“整理”**。 - 一个聪明人必备的素质,一定是足够强大和发达的前额叶皮层,而前额叶皮层跟杏仁核是互相抑制的。 - **前额叶皮层是我们的控制和注意中心。**它的作用是:把你的注意力转移到某个目标上,并进行详细、理性的思考。 - **杏仁核是我们的生存和情绪中心**。它特别敏感,又特别活跃。 - 锻炼认知空间: 尽管工作记忆的容量是恒定的4个单位(Cowan, 2001),但更高的认知空间,就意味着你能够把更多的信息“塞进”这4个单位,让大脑在**同一时间内能够处理更多的素材**。 - 联系方法: 回想,理解,联想 - 提高认知共情能力 - 大脑的默认模式,叫做 DMN(Default Mode Network,默认模式网络),是**一个低激发态、扩散式、随机游走的网络结构**。 - 过练习 DMN 网络,来锻炼认知共情能力: 跟别人聊天,试着去聆听和理解他们。多问问自己,试着梳理大脑。 - 开放的心态 - 保持审视和批判 - 保持成长心态,不要害怕失败和错误 ### 今日收获 - 感谢要主观,找错要客观 - 持续提供价值,成果会随之而来。Deliver value consistently and results will follow. (**[Tweet link](https://click.mlsend.com/link/c/YT0xNjI5MDQ5MDg4MTI3Mjc2ODM0JmM9dDN4MCZlPTE5MjgmYj01MzM4OTE0MzQmZD1hMGQzcDNw.vfXf35eWFwhK6J-3Tv0gg6k7X3tK4lJ54K-U8-SylvA)**) - 忙起来很简单,有效率很难。It's easy to be busy. It's hard to be productive. (**[Tweet link](https://click.mlsend.com/link/c/YT0xNjI5MDQ5MDg4MTI3Mjc2ODM0JmM9dDN4MCZlPTE5MjgmYj01MzM4OTE0NDMmZD1mMnEyejFx.8Nf390NTU5WLEMYGMTJVgK8ip2Vgi2bJa7lVMESaHUU)**). - 面向对象设计是给数据绑上了方法。闭包设计是给方法绑上了数据。| [v2ex关于闭包的讨论](https://www.v2ex.com/t/756350#reply6) - 生命是一种形式的复制,不限形式的循环 - 克日什托夫-基耶斯洛夫斯基关于团结: "如果说为了文化有什么值得做的事情,那么就是关于将人们联系在一起的主题和情况,而不是那些将人们分开的事情。世界上有太多使人分裂的东西,如宗教、政治、历史和民族主义。 " Krzysztof Kieslowski on unity: "If there is anything worthwhile doing for the sake of culture, then it is touching on subject matters and situations which link people, and not those that divide people. There are too many things in the world which divide people, such as religion, politics, history, and nationalism. " ### 附录:snippets - Go.1.16 embed ```go package main import "embed" //go:embed resources/embed_byte.txt var b []byte //go:embed resources/embed_fs.txt resources/embed_fs_1.txt var f embed.FS func main() { print(string(b)) fi, _ := f.ReadFile("resources/embed_fs.txt") print(string(fi)) fj, _ := f.ReadFile("resources/embed_fs_1.txt") print(string(fj)) } ```