Write the Code. Change the World.

12月 29

mysql 5.7 之后,默认 only_full_group_by 生效。也就是 select 的字段和 group by 的字段一样,额外的聚合函数除外。这样一来,很影响我们数据输出的需要。比如我想知道上海市每个区有多少家店,要展示区名字,店名字,区号。数据库里边存储的字段有店名、区号、区名字等。这个时候 only_full_group_by 严格模式下,直接请求就会有错误。这里是,可以有两种方法来解决。一是关掉 only_full_group_by 模式。二是使用 ANY_VALUE 函数。不错就是使用 ANY_VALUE 函数。

解决方法

个人喜欢使用 ANY_VALUE 来搞定。

SELECT COUNT(*) AS count, 区号, ANY_VALUE(区名字), ANY_VALUE(店名字) FROM 店表 GROUP BY 区号;

阅读全文 >>

12月 18

在很着急的时候,发现 esc 退出不了 vim 的编辑模式。这个键值太气人了,都想砸键盘了。不过,终究还是有方法。不是关了终端从新进。

操作一波

# 用这个搞定
control + c 

阅读全文 >>

12月 13

2022年 10月25日后发布的小程序,无论通过 wx.getUserProfile 还是 wx.getUserInfo 获取到的的用户的信息中(之前也仅能获取头像和昵称。性别地区啥的都会没有),只会有昵称为微信用户,头像为灰色头像的有用信息。说实话,对于开发者,这种搞法太过恶心。

但实践中发现有部分小程序,在用户刚打开小程序时就要求收集用户的微信昵称头像,或者在支付前等不合理路径上要求授权。如果用户拒绝授权,则无法使用小程序或相关功能。在已经获取用户的 openId 与 unionId 信息情况下,用户的微信昵称与头像并不是用户使用小程序的必要条件。为减少此类不合理的强迫授权情况,作出如下调整。

你把你审核的锅摔给开发者,你可以审核的时候不让这种小程序上架不就可以了。记得2019年的时候,就有这样的说明。必须登录注册才能使用的用户不给上架的说明。现在搞什么飞机。

官方相关说明和解决方法

https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html

阅读全文 >>

12月 10

为了增加用户体验或服务端需要,自动识别行驶证、驾驶证、身份证、银行卡、营业执照就很重要。像阿里云、百度都提供相关的接口,可是那个价格都是按次来算的。为了省钱,我就不用他们了。因为微信提供了相关的接口。需要按天次来免费使用。也就是一天内,使用次数在范围内就可以。如果用户不够多(使用的不够多),这个还是蛮划算的。话说,如果需求超过了这个,那证明你的业务蛮好的,也不差这点钱,该买的买。
还有这个调用分服务端调用和云函数调用。如果从服务端调用,不仅小程序这些场景可用,就是其他场景都可以用。因为服务端调用只认 token。

文档

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/img-ocr/ocr/vehicleLicenseOCR.html

或自己写逻辑自己来进行实现 OCR 识别和信息提取。

https://github.com/shouzhong/Scanner

https://github.com/otiai10/gosseract

https://zhuanlan.zhihu.com/p/384659580

https://developer.huawei.com/consumer/cn/hiai/engine/IDcard-ocr

https://support.huaweicloud.com/api-ocr/ocr_03_0030.html

阅读全文 >>

11月 30

数组

sort() 方法对数组的项目进行排序。
排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。
默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。

如:

let fruits = ["Banana", "Orange", "Apple", "Mango"];

fruits.sort();

# 输出 ['Apple', 'Banana', 'Mango', 'Orange']

fruits.reverse();
# 输出 ['Orange', 'Mango', 'Banana', 'Apple']

不过基于数字的排序,是按字符串来排序的。比如 33 排序比 123 要后。 如果非要基于数字大小来排。可以通过传入函数的方式来解决。

比如:

let arr = [1, 123, 22,5, 32];
arr.sort((a,b)=>(a-b));
# 输出 1, 5, 22, 32, 123
# 这样就可以基于数字来排序了

如果是基于数组里的 object ,也可以通过这种方式来排序。

Object 呢

对 object 按键值排序,一般在做加密验证的时候会用到。

有了数组的排序,object 也一样可以。

let param = {
    name: 'vini123',
    gender: 1,
    time: 1669796346
}

let sorted = {};
Object.keys(param).sort().forEach(key => {
    sorted[key] = param[key];
});

阅读全文 >>

11月 21

uniapp 打包 app 时,默认安全区域的颜色是白色。如果页面和安全区域接触的区域不是白色,就会出现色差,这个时候体验就真心不好啊。不过,可以设置去搞掉。
我也是在做聊天功能时才碰触到颜色的问题。

https://uniapp.dcloud.net.cn/collocation/manifest-app.html#full-manifest

在文档中,找到 safearea 配置,复制过去在 manifest.json 找到 app-plus 添加进去去配置。

        "safearea": {                            
            "bottom": {                                            
                "offset": "none"
            }
        },

可以这样设置。

参考

https://blog.csdn.net/CSDN877425287/article/details/107484287

阅读全文 >>

11月 19

时间,日期相关的处理, carbon 的确是个好东西。感觉离不开呀。

Carbon 是对 PHP DateTime 模块的二次扩展;提供时间格式化,时间计算的功能;

官方主页:http://carbon.nesbot.com/;

github: https://github.com/briannesbitt/Carbon

参考

https://www.jianshu.com/p/7e45bc4d0006

https://www.php.cn/phpkj/laravel/484191.html

https://learnku.com/articles/62292

阅读全文 >>