非淡泊无以明志,非宁静无以致远

在前端调试的时候,跨域一直都是一个比较麻烦的问题,这个在之前的文章 关于跨域问题的一个解决方法 中其实已经讨论了一些可以使用的方法。

如果要使用 JSONP,第一是需要修改的地方比较多,而且也不太符合前端发展的大趋势,如果使用 CORS 的话并没有 application/json 类型。而且更重要的是这只是在前端调试时候的需求,并不是在上线以后的需求,所以对后端有太多的入侵也不好。

所以就有一个念想突然在大脑中闪过——加入有一个代理不就可以解决这个问题了?但是又想了一下写起来还挺麻烦,于是就被搁置了。

直到前几天 Stone 提到其实 webpack-dev-server 早就想到并且已经帮我们实现了。

于是,我就在一个 Vue 项目中进行测试,发现真的很赞,既可以本地 Server 热加载,还可以直接跨域调用远程 API,完美解决了之前遇到的所有问题。

接下来我简要介绍一下步骤(以一个 Vue 脚手架建立的 webpack 项目为例):

首先检查 build/webpack.dev.conf.js 中是否有

这个配置项,如果被注释掉,请打开注释,如果没有,请加入到 devServer 对象中

然后在 config/index.js 中的 dev 对象中加入 proxyTable 配置项:

前面的键 /** 意思是代理所有请求,如果代理某些请求,可以将其改为诸如 /api 之类的字符串。

后面的 target 就是要代理到的网站,changeOrigin 的意思就是把 http 请求中的 Origin 字段进行变换,在浏览器接收到后端回复的时候,浏览器会以为这是本地请求,而在后端那边会以为是在站内的调用。

这样,通过这个简单的配置,就完美地解决了跨域的问题。

之后,在直接运行

的时候,就可以将测试前端中的 ajax 请求代理到后端服务器进行测试啦!

最后,贴上官方文档,具体的配置大家可以参考这里:

https://webpack.js.org/configuration/dev-server/#devserver-proxy

偶然读到王德峰老师的一本已经绝版的小册子,叫《寻觅意义》。心想这个题目起的甚是有趣——其一我在想他会怎么写,结果读下去发现是他在各个大学讲座的讲稿的一个小集;其二说来也很巧,我最近也一直在反思意义究竟是什么,我做什么才有意义,我追求的意义是什么,有没有属于这个时代的意义,而真正的大义又是何物呢?

关于时代的意义,和妈妈聊天的时候,她关于她的意义是什么给了我如下的解答:“除了想让你过的开心快乐,剩下的意义就是多赚钱了,钱赚得多,我就感觉很踏实。”我想,前半句是家庭,是我和母亲很真挚的亲情;后半句是时代,是我和母亲以及所有存活于现代社会的人共同处于的环境。

我们所处的是这样一个被资本与技术所主导的时代。所以我理解大家的理想多是要去赚钱。不论男女老少,不论贫穷富贵,每个人的欲望也总和钱脱不开关系。而钱这个东西,究其根本,不过是一个几乎是全人类共同参与的一个游戏,同我们的能生存与否没有什么直接的依赖关系,只是在这个时代里,我们需要用钱去获得各种生存资源和对他人支配的权力。 所以与其说我们想去赚钱,不如说是这个时代规定了我们想要的是去赚钱。

More Link

深度写作

最近看见沈向洋发表了一篇文章(地址:https://zhuanlan.zhihu.com/p/33771188),大意是说在这个 AI 的时代,虽然每天我们产生和接受的的零碎的信息量都非常巨大,但真正有意义的思考还是需要通过长篇写作来完成。写作可以帮我们理清思绪,可以清晰地表达观点和逻辑。

这也是我最近所担心的事情——我也已经很久没有进行过深度的写作了。

上次系统地写作还是中外文学名著鉴赏的期末作业,文章虽然可以大致表达我想说的表面意思,但是短短八百字的表达却支离破碎,根本无法把我更深成次的想法完整表述出来。在刚写完的时候没感觉到还沾沾自喜,觉得一下午写出来的文章应该还能看,之后读起来却就像是读一篇小学生记的流水账一般,像是喝了一大杯白开水还泛着水垢一般,毫无深度,甚至还难以读完。

感触更深的一次是上个月我想抽空写一下去年的年终总结,但刚提笔就不知道该从何说起,所以又去翻前几年的文章,发现当时的文风根本现在几乎无法模仿。我十分懊恼,故总结也一直搁置下去。

直到今天,我才有勇气重新打开编辑器开始写这篇文章。今天没有给文章定下主题,想到哪里就写哪里,但愿思路会更顺一些吧。

More Link

Windows 桌面程序开发一些方案

开发 Windows GUI 程序的方案有很多,接触过比较流行的大概有三种,一种是 C++和 Qt,一种是 HTML5+浏览器内核,最后一种是 C#+WPF。另外古老的 WinForms 和更古老的 MFC 也不多说了。

Qt 的跨平台特性得以开发的项目可以跨平台,而且各种 C++的组件非常丰富。但是但是 Qt 本身库的并不小,我也不是很喜欢 QML 那种 JSON 的书写方式,而且 Qt Creator 用起来也不太顺手,所以一般没怎么用过这种开发模式进行桌面应用的开发。

H5 和浏览器内核是一个不错的方式,可以轻松跨平台,而且 H5+JS 可以有很快的开发速度。主流的方案有 Electron、nwjs、cef 和 wke(其中 弹幕派 所用的方案就是 wke),但是 Electron 同样体积巨大,不利于应用的分发。wke 虽小但也很久没有更新,内核很老,bug 比较多。最近志鹏同学正在研究之前 wke 开发者新开发的 miniblink 内核,相信这个方案会比较优秀。

WPF 必须依赖于.NetFramework,所以无法跨平台,而且 XP 也不自带.Net,需要用户安装。另外,XAML 虽然写起来麻烦一些,但是开发漂亮的 GUI 还是比较方便。而最新的 UWP 技术也利用了 WPF 的 XAML 进行 UI 的设计,转型起来并不困难。

起因

上周受到卤蛋同学的启发,如果需要使用 C++开发 GUI 程序难道只能用 Qt(或者北邮老师专用的 ege)?能不能使用熟悉的就技术来开发呢?于是在 Windows Dev Center 里找到了使用 C++和 XAML 开发 UWP 程序的方式。粗略看了一下,大概是使用经过微软扩展的 C++,名字叫 c++/cx,基于 Windows RT,但是不受.Net 的托管,也就是要自己处理垃圾回收(这方面理解不够深入,感觉大概是这个意思吧)。

但不管如何,可以使用 C++和 XAML 开发 Windows 应用还是让人眼前一亮,忍不住去尝试一下。所以,下面开工吧!

More Link

这是一篇受密码保护的文章,您需要提供访问密码:

https://leetcode.com/problems/valid-parentheses/description/

括号匹配的问题,记录左括号,寻找右括号是否匹配,用栈实现。

用时 62ms,时间比较慢,需要寻找更高效的办法(可能少用一些哈希表效果会比较好),明天再试试

https://leetcode.com/problems/longest-common-prefix

最长前缀匹配问题,最直观的思路的程序如下:

用时 39ms

https://leetcode.com/problems/roman-to-integer/description/

主要是掌握罗马数字和阿拉伯数字的转换规律,剩下的按照正常思路应该没啥难度

用时 162ms,感觉比平均要慢,但是除了想到缓存变量,减少判断以外想不到太好的算法上的改进方法。

https://leetcode.com/problems/palindrome-number/description/

又水了一道很简单的题,求回文数,只要记着负数肯定不是回文数就可以了。

简单从左右分别开始比较:

用时 192ms

用 Python 字符串反转的方式最简洁,一行搞定:

用时 205ms,和上一种方法几乎一样

https://leetcode.com/problems/reverse-integer/

LeetCode 最简单的题目之一,不过要好好审题。

比如题目要求—— The input is assumed to be a 32-bit signed integer. Your function should return 0 when the reversed integer overflows.

我根本没有看见粗体的 renversed,所以一直对输入是不是符合 32 位整数进行判断,结果闹了很久才明白为啥最后几个 case 没法 a。

复习:32 位有符号整数范围 -2^31~2^31-1,剩下使用 Python 应该没有任何问题。

下面的思路是将数字转换成字符串然后反转:

用时 52ms

换种思路,使用最简单的整除和取余:

因为加了循环,所以用时稍长一些,65ms