你说的是这个:https://github.com/pallets/flask
禁止上传 bmp 图片。
允许上传 gif、jpeg、png 图片,并确保图片实际类型、图片后缀名、 content_type 一致。
关于PNG图片,如果不能确保用户安装 Ms07-057 补丁,禁止上传。
据我所知,图片的色彩模式不是CMYK模式,置入到 AI 中会自动转化成 CMYK 模式,但已经做好的图在不修改的情况是不会自己变颜色的。
Python 的快速参考:https://www.pcwdld.com/python-cheat-sheet
其实这里由于λ演算中,对于函数是延迟求值的,而对于 JS 这种 call by value 的语言来说,是必须先求值再作为实参传入函数的。所以在 JS 中利用 v => f(x(x))(v) 这种方式来进行对 x 延迟求值,而在λ演算中,直接 f(v=>x(x)(v)),这里的 x 表达式并不会立即求值。注意在 JS 中如果是λ中的这种写法会引起 stack crash。
好文,找了很多篇讲 YC 的,这篇最好懂。多谢博主。
最后有个问题,我把
let Y = factory => {
let magic = self => n => factory(self(self))(n)
return magic(magic)
}
手动转化为 es6 箭头函数,结果如下:
let Y = f =>
(x => v => f(x(x))(v))
(x => v => f(x(x))(v))
这和 λ演算 的写法不太一样啊,λ演算是
f =>
(x => f(v => x(x)(v)))
(x => f(v => x(x)(v)))
问题就出在 v => f(x(x))(v)
与f(v => x(x)(v))
是否等价,感觉大部分情况都不等价,似乎只有某一类特定的f
才能满足这个……“结合律”?
//这样Y就变得非常简单了 let Y = f => f(f) //但这样 factory 就变得复杂了 let factory = self => n => n < 2 ? 1 : n * self(self)(n-1)
我觉得这里的问题好像不是谁简单谁复杂,而是这样的 Y
似乎不再具备 Y 组合子的特性了?就这篇文章的目的来说,这应该不是一个可接受的状况。
你的思路非常不错。
//这个 self 指的是阶乘函数自身,只是一个语义提示 let factory = self => n => n < 2 ? 1 : n * self(n - 1) //也可以换成这样 let factory = fact=> n => n < 2 ? 1 : n * fact(n - 1) //这样做,很难反映出 fact 就是 factory 生产出来的。 //这样Y就变得非常简单了 let Y = f => f(f) //但这样 factory 就变得复杂了 let factory = self => n => n < 2 ? 1 : n * self(self)(n-1)
至于性能测试,这篇文章的内容,不是为了投入实际生产,不是一个实用技巧。
更像是一个科普资讯,展现 js 里的匿名函数跟函数式语言里的 lambda 表达式的关系,以及跟计算机里的 lambda 跟图灵机,跟数学里的 lambda 演算,跟哥德尔不完备定理,跟康托尔的集合论之间存在的千丝万缕的联系。
这是 JavaScript 所处的大背景,这篇文章是为了让更多人能在在这么个背景下,重新审视这门语言。
//定义时就工厂化,生产出阶乘函数 let factory = self => n => n < 2 ? 1 : n * self(n - 1)
我觉得这里不太对,这里说的factory是一个生成lambd函数的工厂,而真正需要形成递归的是 其生成的lambd函数,但是 这里的self指的是factory而不是 其生成的lambda函数,及这里的self需要替换成 需要递归的lambda函数——>最简单的方式:
let factory = self => n => n<2 ? 1 : n*self(self)(n-1) //这样Y就变得非常简单了, let Y = f => f(f)
还有,我有一样东西想不明白,为什么要执着于用lambda函数做递归?
我简单用ES5测了一下,三种方式的时间消耗量:
var f1 = function (s) { return function (n) { return n<2 ? 1: n*s(s)(n-1) } } //your function var f2 = function (s) { return function (n) { return n<2 ? 1: n*s(n-1) } } var simpleY = function (f) { return f(f); } //your Y var Y = function (factory) { var magic = function (self) { return function (n) { return factory(self(self))(n) } } return magic(magic) } var e1 = simpleY(f1) var e2 = Y(f2) function normal(n){ return n < 2 ? 1: n*normal(n-1) } function player(f, n, loop){ for(var i=0;i< loop;i++){ f(n) } } var start = new Date() player(normal, 1000, 10000) var end1 = new Date() player(e1, 1000, 10000) var end2 = new Date() player(e2, 1000, 10000) var end3 = new Date() console.log(end1 - start) console.log(end2 - end1) console.log(end3 - end2) //result: //136 //558 //1382 //我的电脑低性能,求原谅
经测试,直接在 cmd 里面执行会提示找不到命令,需要在 windows powershell 执行才可以。
感觉 MBOX 灵活,MVVM 的,数据驱动,理解特别容易,VIEW 只是 STATE 的一个展现。
另外示例中是在 renderer 端对更新操作进行控制,个人认为更新功能作为独立的小模块,放在 main 端更加符合一般的通用场景。
main 端自动更新的代码可以参考 autoUpdate
用相同的方法在 Windows 下做了实践,与 MacOX 的不同主要有两个部分
update.json
update.json 格式参考如下:
{
"win32-x64-prod": {
"readme": "Second Release",
"update": "http://xxx/releases/download/1.2.0",
"install": "http://xxx/releases/download/1.2.0/xxx.Setup.1.2.0.exe",
"version": "1.2.0"
}
}
install
指定更新包的地址。
build 配置
package.json
中 electron-builder
配置内容如下:
"build": {
...
"win": {
"target": "squirrel"
},
"squirrelWindows": {
"iconUrl": "https://raw.githubusercontent.com/megahertz/electron-simple-updater/master/example/build/icon.ico"
}
},
新版本的 WordPress 没测试过,插件页 https://wordpress.org/plugins/multiple-post-thumbnails/ 注明了测试过的最高版本 5.0.16,这插件 4 年没更新了,不兼容就没法了。
Multiple Post Thumbnails 给文章添加多个特色图片