易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
Kujiale-Mobile/Painter 踩小坑以及处理方法

Kujiale-Mobile/Painter 踩小坑以及处理方法

Kujiale-Mobile/Painter是一个优秀的JS生成canvas的库,如果配合https://lingxiaoyi.github.io/painter-custom-poster/,这个在生制作模板的工具,你会发现哇。原来做个二维码这么容易 。

优秀不代表没有缺点,至少我在使用的时候,真是踩了不少坑。网上的例子都是说直接使用"userComponents":{"painter":"path"}

然而我真的遇到了问题,先申明 ,我是在uniapp下面使用这个

1、各种例子说的组件位置都不一样,有说,放在根目录下:components目录,有说wxcomponents目录,甚至也有人说放在static目录下。我一个个都试了,结果 都是报app.json不正常。查了文档,都说路径不对。各种例子里的路径也是千奇百怪。有的路径用的"./components",有的用的是"/components",也有前面没有任何路径的。后面查到了官方,原来在某个版本的更新后,已经可以不用在前面加"./"或者"/"了。然而我还是不正常。最终我没有用这个办法,我是直接在main.js里采用import的方式解决了。【这个后面还要再提一下】

2、Painter 在网上的例子,都是<painter :palette="xxx" >类似这样,或者<painter palette="{{xxx}}" >这样的类似原生的调用方法。在官方的文档中有说:palette支持的是静态模板,也就是说这里的变量是先生成好的。而不是即时生成。。。。这个就很尴尬了,毕竟我不是做早安图之类的。在进页面前,可能不知道模板中的图片路径是不是确定好。再查的时候,就发现了,原来新版已经支持 dancePalette

3、采用dancePalette,果然是随时可以调用了,但又发生了一个问题,即原来canvas生成的时候,有ImgOK事件。但dancePalette没有ImgOK事件,确实,官方文档中有说,didShow事件是在使用dancePalette模板里触发。直接用最新版,会发现didShow方法报错。于是改代码,在didShow后加了个参数,现在只是不报错了,但还是没啥用。

于是猜想,是不是以前正常,现在不正常了呢?因为发现代码中有使用canvas2d,所以直接下载了canvas2d分支。结果下载后,我原来的import方式不能用了,但是那种:userComponents的方式又正常了。好吧,这不是大事。继续 测试didShow,果然这个分支的didShow输出N多内容。然而最重要的。detail节点没有任何内容,也就是说didShow没有生成Canvas的临时地址。这个事情就尴尬了。

当然我没放弃,我就一直在想,painter的palette静态模板调用,我是不是可以用呢。毕竟,uniapp采用的是vue(或者说是伪VUE),我可以利用v-if,先隐藏painter组件,等 palette的模板生成好了。我再加载painter组件,这时候不是就可以了吗?

说做就做,在<painter>外层加了一个view,默认v-if="templateGenerated == true",data()中先设置为false,然后请求完数据,赋值变量palette后,设置templateGenerate=true;

组件顺利调用,ImgOK方法也触发了。有了路径,什么长按保存,点击预览就都好办了。不是嘛~

至此,踩坑完毕,希望能够给同样踩坑的人有个小帮助。

或许有人说,为什么不看源码,提交PR?大哥,我只是画个太阳码,根本没心思看整个源码。。也没时间啊,先绕过去再说,如果有人能够提交PR,我也可以到时候再试试。

最后,感谢:

1、https://lingxiaoyi.github.io/painter-custom-poster/

2、https://github.com/Kujiale-Mobile/Painter/tree/canvas2d

uni-app开发微信小程序如何授权(兼容iso和Android)保存图片到相册?

uni-app开发微信小程序如何授权(兼容iso和Android)保存图片到相册?

市面上开发小程序的工具有很多,如果你只是个人开发者,或者是小公司,前端技术没有那么精通的。还是用uniapp吧。确实比较简单,会一点vue就行了。就当开发一个网页就行了。非网页的地方用 #ifndef H5 之类的判断一下处理就OK,然后还能编译成APP。试了一下。在现代的机器下面,性能也确实可以

当然你要说什么ApiCloud/taro/mpvue等都支持,我也没话说。但从便捷性上来说。确实是uniapp更方便一点。而且可找的资料,别人写的代码、插件也确实更多。硬要说不爽的,那就是。。。。公司自己的编辑器HBuilderX实在太烂。连代码跳传都做不到(也可能是我姿势不对。)

这里贴一段别人的长按保存到相册,长按事件是小程序自带的longpress。所以uniapp里的事件就是:

/**
* @description 保存图片,保存到系统相册
* @param {String} imgSrc 图片路径
* @param {String} content 授权提示语句
* @param {String} failTip 无图片保存时失败提示
* @param {String} successTip 保存成功提示
*/
saveImage(imgSrc, content="是否允许获取保存相册权限", failTip='暂无图片', successTip="已保存到本地相册,请打开相册扫描") {
uni.saveImageToPhotosAlbum({
filePath: imgSrc,
// 保存成功,直接给出提示
success: (res) => {
uni.showModal({
title: '提示',
content: successTip,
showCancel: false,
confirmText: "好的"
})
},

// 保存失败,判断是否授权,未授权则调用授权,否则弹出失败信息
fail(err) {
console.error(err);
if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg ===
"saveImageToPhotosAlbum:fail authorize no response" || err.errMsg === "saveImageToPhotosAlbum:fail auth denied") { // 没有授权,重新授权,兼容iso和Android
uni.showModal({
title: '授权提示',
content: content,
success: (res) => {
if (res.confirm) { // 点击确定,则调用相册授权
uni.openSetting({
success(settingdata) {
if (settingdata.authSetting["scope.writePhotosAlbum"]) {
console.log("获取权限成功,再次点击图片保存到相册")
uni.showToast({
title: '授权成功,请重试哦~'
});
} else {
console.log("获取权限失败")
uni.showToast({
title: '请确定已打开保存权限',
icon: "none"
});
}
}
})
}
}
})
} else if (err.errMsg === "saveImageToPhotosAlbum:fail file not found" || err.errMsg ===
"saveImageToPhotosAlbum:fail file not exists" || err.errMsg ===
"saveImageToPhotosAlbum:fail get file data fail"
) { // 无图片,则提示
uni.showToast({
title: failTip,
icon: "none"
});
}
}
})
},

原文地址在这里:https://blog.csdn.net/liuxin00020/article/details/104843960,如果保存还是失败,那就先用uni.getImageInfo(),会自动调用图片下载的(特别是微信小程序,还要设置downloadFilePath,否则也不能下载图片,这其实就是很多生成canvas失败的原因之一)

嗯,服务器又折腾了一下

嗯,服务器又折腾了一下

服务器又做了一个处理。

原来是Caddy + apache ,想着是自动签名。但caddy对泛域名的签名是从dns走的。即使我设置了dnspod的key/secret,也签名失败。
但是,如果一个个签,就没问题。所以起初的时候就忍忍了。
我另外一台服务器上,其实就是用的nginx+acme.sh+apache。乘着今天拉肚子,做其他事情没有精力,就折腾了一下。反正弄这事,不需要动脑
现在切成了nginx+php-fpm。中间还被 .user.ini 折腾了半天。
你没看错, .user.ini,这是因为我用了lnmp的套件(又是一个偷懒的行为,但目前看来,还是可以的)。而且lnmp套件,也支持多PHP版本(虽然我现在用的是php 7.3,感觉也够了。。。)
lnmp也自带签名。我就不用管不用处理了。至于还自带了什么ftp/mysql,我都不要。。。只要nginx,php-fpm,ssl,足够了!
Ruby SSL Error: certificate verify failed

Ruby SSL Error: certificate verify failed

安装fastlane的时候报错:

ERROR: SSL verification error at depth 0: ok (0)
ERROR: SSL verification error at depth 0: ok (0)
ERROR: SSL verification error at depth 0: ok (0)
ERROR: Could not find a valid gem 'rvm' (>= 0), here is why:
Unable to download data from https://ruby.taobao.org/ - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (certificate rejected) (https://ruby.taobao.org/specs.4.8.gz)
ERROR: SSL verification error at depth 0: ok (0)
ERROR: SSL verification error at depth 0: ok (0)
网上很多解决方法,什么重建 pem,之类的,或者临时关闭验证:【http.verify_mode = OpenSSL::SSL::VERIFY_NONE】,但更多人都推荐一句话的命令:rvm osx-ssl-certs update all。然而我运行下来却是:
Selected SSL certs for: curl
cURL certificate bundle curl is /usr/share/curl/curl-ca-bundle.crt not found
嗯,这回又是一堆人遇到了同样的问题,看看这个高票答案,居然只是说rvm用stable版?
$ \curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
不过也有人有不同的看法:
To find the location of this file use:

$ curl-config --ca

/usr/share/curl/curl-ca-bundle.crt
Backup your curl-ca-bundle.crt file:

$ cp /usr/share/curl/curl-ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt.old
Then you want to concatenate the two file using:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt
看起来倒是可行。
参考 :
1、https://blog.engineyard.com/ruby-ssl-error-certificate-verify-failed
2、https://stackoverflow.com/questions/6414232/curl-certificate-error-when-using-rvm-to-install-ruby-1-9-2/6917309
How to fix ReferenceError: primordials is not defined in node

How to fix ReferenceError: primordials is not defined in node

最近在编译的时候,遇到这个问题:primordials is not defined in node,问了一下项目方,说是只能在node11下才行。查了网上遇到这些问题的。也往往都是node12,node13,我。。。node14.。

于是npm -g install n ,然后运行n 11,安装了11,再运行。。。正常了

如果不喜欢用n,也可以安装npm -g install nvm。一样一样的

记录一次数据库无法访问的处理

记录一次数据库无法访问的处理

很突然,线上有一台服务器,突然报表不存在。所有的项目只要涉及到数据库的,都直接报表不存在。SSH到服务器上一看,进程也活着,目录下的文件也存在着,怎么就表不存在了呢?

当时也没有注意,觉得可能是程序出错了。就restart了一下数据库,结果,这回出大事了,数据库无法启动。再启动,仍然是这个问题。连忙看了一下日志,发现报错原因居然是磁盘满了。这,不科学啊。df -h 看一下,果然,系统盘自带的20G,剩余空间为0。

怎么办?先清一下apt-cache,发现多出100多M的空间,尝试启动了一下,果然数据库启动了。再检查到底是谁占了?直接du -sh /var/log。居然只有200M,那是怎么回事呢?

继续 找,du -sh 一个目录一个目录的看。发现居然是mail目录写满了,一个mail文件。17G,用tail -n 1000 看了一下。文件居然都来自crontab ,再打开crontab -l,才发现,原来是有一个5年前的svn的勾子在运行。这个勾子,每5秒一次,就这样辛苦的运行了5年,终于通过邮件,硬生生的将磁盘写满了。

知道问题所在就简单了。关闭crontab (因为已经不用了)。同时清空邮件文件。再df -h,发现多出17G空间。好嗨森

Git:Out of memory, malloc failed解决

Git:Out of memory, malloc failed解决

本来我是应该不会遇到这种问题的吧?只是在用composer的时候,因为dcat-admin经常更新,但release版本又比较慢。所以就直接引用他的git了。本地无所谓,毕竟我有32G内存,上线后,在composer update的时候,报out of memory.

网上不少的例子都是说:git config --global pack.windowMemory 1024m,我这样试了之后没有解决
于是:

git config --global pack.windowMemory 1g
git config --global pack.packSizeLimit 1g

git config --global pack.deltaCacheSize 1g

git config --global core.packedGitLimit 1g

git config --global core.packedGitWindowSize 1g

还是没有用。再找资料的时候有看到说,可能是因为没有swap空间,即使你的内存大,没有swap也可能会有问题。于是看了一下,确实:free -m的时候。swap确实是0,参考:https://stackoverflow.com/questions/14038074/git-pull-fatal-out-of-memory-malloc-failed

好吧,几步操作:

1、dd if=/dev/zero of=/root/myswapfile bs=1M count=1024

2、chmod 600 /root/myswapfile

3、mkswap /root/myswapfile

4、swapon /root/myswapfile

5、vim /etc/fstab
/root/myswapfile swap swap defaults 0 0

然后就一切OK了,没有好好排版。因为,断断续续的写了三天。中间还断过一次。忍忍吧(等什么时候换laravel后台再好好弄弄)

睡觉开灯对人体有害?

睡觉开灯对人体有害?

标题是一个疑问句,事实上很多人在说到睡觉时是不是能够开灯,开灯对身体有没有影响,好象都是说非常大。什么开灯会影响视力,黑色素会沉淀之类的。找了一下,几乎所有说这个的,都提到了一段内容:

美国宾州大学医学院暨儿童医院的研究人员,对479位2-16岁的幼童及青少年进行研究,数据显示,视力与2岁的睡觉光源亮度有相当密切的关联性。
2岁前若是睡在黑暗房间,近视比例是10%,2岁前若是睡在开着小夜灯的房间中,近视比例是34%,2岁前若是睡在开着大灯的房间中,近视比例是55%。

这个我就感觉到太厉害了。这些研究人员能够从2岁开始跟踪,跟踪了14年。我翻了一下谷歌,大概几十页。搜索结果算是半官方的是中国中新网:http://www.chinanews.com/hb/news/2010/06-12/2341373.shtml,这篇文章发表于2010年,文中提到了:【前年刊登在《自然》期刊中,由美国宾州大学医学院暨儿童医院针对479位2岁到16岁的幼童及青少年的调查】。提到了:前年。证明这个是2007年发表的。

然后我继续搜索,发现一个【国际明目网】,网址是【http://www.mingmu.net/thread-67-2-1.html】,也提到了这个内容。但他的内容的日期是【2007-2-9 01:08:59】,很辛苦的大半夜的发贴。于是我去翻了一下自然杂志。。。。没看到有相关的(可能是因为我翻的是国内的)

那我就想了。这么有名的实验,有么有名的大学,那么应该有纪录吧。可是我啥也不知道怎么办?于是先确定【宾州大学的全称】,毕竟象我这样初中毕业的人,怎么可能知道这么高等的大学全称?google一下,全称为:University of Pennsylvania。于是很偷懒的在google里搜索:【nature University of Pennsylvania sleep child】,发现第2条,1999年5月13日就是这篇。打开一看,全英文,看都看不懂,怎么办?直接搜索479,果然页面里有479。文章地址是:https://www.nature.com/articles/news990513-1。文中指出了全文地址是:https://www.nature.com/articles/20094#Bib1,看了一下,要8.99刀。买不起。。。。

借着google的翻译 。然后就着自己那可怜的英文,确实发现了10%,34%,55%等关键字:

Only 10 per cent of infants who slept in darkened nurseries became myopic later on in childhood. This contrasted with a figure of 34 per cent of infants sleeping with a 'night light', and a remarkable 55 per cent of infants who regularly slept with the room lights on.

但是,这里面有一个很重要的因素:

1、这是民意测验,就象你看到个网页,上面有个调查,你做一下。

2、70%的白人,其他几乎全是黑人,亚洲人1%左右

3、这是对来门诊的人的调查,也就是说这些人是已经近视的。所以才凑满了100%,对那些没有近视或者没有到门诊的人来说,完全就不清楚了。

4、没有完整的说明遗传因素,家长近视的话,对儿童有多少影响也没有提及

文中也提到了,没有亚洲人的数据,不能对亚洲人是否下结论,那么,我就想了。。。。要么,亚洲人就没去过他们医院,要么亚州人,就不会近视?(笑一下)

就当随便看看吧。反正这些数据现在已经被全量引用了,就当他是真的吧。如果你睡不着,想不想开灯?反正就算是上面的论文,也是50%/50%的近视概率。。。。毕竟不开灯,你也ne10%的概率 。你看着办喽

Dcat-Admin 的 multipleSelect和select 在编辑的时候如何赋值?

Dcat-Admin 的 multipleSelect和select 在编辑的时候如何赋值?

Dcat-Admin的multipleSelect和select 在新增的时候,可以通过default()方法给它赋值,但在编辑的时候,不能通过default方法赋值。

1、如果编辑的时候,默认数据库取出来的值,对应着 options中的key,可以直接使用。

2、如果需要调整,比如存到数据库时,是字符串型,但select/multipleSelect的value只能是数组。如果通过->value([$data])赋值也是无效的。只能通过customFormat方法进行赋值。默认的参数就是传进来的值。如果你是字符串,可以explde,如果是对象,可以遍历后返回。

参考 :http://www.dcatadmin.com/docs/master/model-form-fields.html