手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2024年11月的文章

PHP 8.1 features a new type for return values: never.

如题

 
比如,你定义了一个方法,
PHP代码
  1. function test():never {  
  2.      exit(1);  
  3. }  

在其他方法使用的时候, 
PHP代码
  1. doSomething(){ 
  2.     test() ; 
  3.     echo 123;
  4. }  

在IDE里,会提示这个echo 123;的错误是unreachable

 
原来phpstorm支持:#[NoReturn] 这个注释,但现在有语法级的支持,则变得更舒服。
----
然而,现在线上用的还是PHP7.3。连fn=> 这个功能都用不了。还有就是对于对象的操作$a?->b?->c也用不了。。。
只能接着忍,Laravel 9最低要8.0了,估计可能会强制更新了

Onedrive 终于更新Apple silicon原生版本了

在看新闻时突然看到说onedrive开始支持原生版本了,版本号是:22.022,兴冲冲的下载,结果发现还是Intel。。。

在仔细看了一下外媒新闻时,发现他们都在设置里打了勾【获取ondrive预览计划
于是打开OneDrive的首选项,在关于页中,对【获取ondrive预览计划】进行打勾。然后关闭首选项,再次打开,这时候在关于页就有一个按钮【获取Apple silicon更新】,点击后,弹出对话框,提示在更新。此时看进程,会有一个:[OneDrive updater]在运行。(只是运行一阵后,就无响应了)
 
先不管它,可能是因为我在同步,让他慢慢更新了...

uniapp点击tabbar不刷新的处理

在使用UniApp进行小程序开发的时候,总是不可避免的会使用tabbar。在小程序中tabbar的页面和普通的页面不一样,比如,他对应的页面就始终含有tabbar,而其他页面则不显示tabbar(要显示只能用自定义组件)。而且切换页面的时候,只能用switchTab,而不能用navigateTo。

这些都是平时可以看得到和可以通过报错信息查看得到的(比如navigateTo跳到tabbar时,出错信息就是提示不能跳转到tabbar的页面)。

tabbar还有一些有意思的小特性,比如,tabbar对应的页面,不能是分包里的,只能含在主包里。tabbar打开后数据加载完,默认不再刷新。这个就带来不小的问题,比如电商的首页,加载后不刷新那就一直无法获取最新数据了。

通过查看uniapp的文档,发现App.vue除了常见的onLaunch/onShow/onHide等之外,还有什么onPageNotFound(这个平时不会触发,只有扫描、转发等才会触发,navigateTo等不会触发此事件)之类的。[应用生命周期:生命周期 - uni-app官网 (dcloud.io)]

而普通页面,常用事件就是onInit/onLoad/onShow/onHide/onUnload,除此之外还有:onResize/onPullDownRefresh/onReachBottom/onPageScroll,如果是页面点击事件,还有onTabItemTap/onShareAppMessage/onNavigationBarButtonTap/onBackPress【页面生命周期:生命周期 - uni-app官网 (dcloud.io)

当注意到onTabItemTap事件后,就想起来,可以利用此事件进行操作:onTabItemTap(e){console.log(e);},打印这个e,可以看到他是一个Json对象,有三个主要的key:index/pagePath/text,index是针对Tabbar的索引 ,pagePath是当前Tab的路径,text是tabbar对应的文字。

于是就可以利用这个pagePath:

JavaScript代码
  1. onTabItemTap(e){  
  2.    uni.reLaunch({url:e.pagePath});  
  3. }  

偷懒的时候就可以直接这么做。

纯记录。

zerotier 提速

 Zerotier和tailscale一样都是类似创建虚拟网络的一个软件,Tailscale有个不太好的地方就是只能用google账号登录(记不清是我当时这么选的,还是只能用这个登录了。也就导致了我在IOS上无法登录。毕竟登录google账号需要VPN,然后Tailscale如果active,就又要自己创建vpn,结果 就导致关闭了梯子的VPN,真是一个悖论。)

在电脑上使用的时候,两者差不太多,如果使用Tailscale的话,需要每个月登录一次(mac下,否则可能会token过期)。zerotier好象目前还没有遇到。

同时,zerotier可以使用moon节点加速,tailscale好象暂不行,只能通过国外中转。zerotier原来有100个免费的leaf,现在降为50个了,但对普通人说,别说50个,就是10个也足够了。所以,我其实是两个混用的。以防万一哪一个挂掉。

zerotier如果不使用moon节点,速度其实和tailscale差不太多,创建moon节点并连接上后,会发现快了很多。(然而,手机版的zerotier-one不知道怎么启用moon节点)

----如何创建moon节点?网上有很多例子,我是参考的这一篇:zerotier自建moon教程 - 方舟基地 (wnark.com)。如果要看详细的,请直接移步链接。

我取了其中的几个简化的步骤:

XML/HTML代码
  1. 找个好一点的机器 :  
  2. cd /var/lib/zerotier-one  
  3. 生成moon.json模板  
  4. zerotier-idtool initmoon identity.public > moon.json   
  5.   
  6. 修改moon.json模板  
  7. 要记住id之后加入moon服务器全靠他。检查 "id"是否为你vps的10为字符id,可在zerotier网页管理端查看,如果不是说明上一步配置有误。  
  8. vi 编辑 moon.json,修改 “stableEndpoints” 为 VPS 的公网的 IP,以 IPv4 为例,记得带引号:  
  9.   
  10. "stableEndpoints": [ "8.8.8.8/9993" ]  
  11. 生成签名文件  
  12. 用到上一步中的 moon.json, 执行  
  13.   
  14. zerotier-idtool genmoon moon.json  
  15. 执行之后生成 000000xxxx.moon 文件。  
  16.   
  17. 将 moon 节点加入网络  
  18. 在 VPS 的 Zerotier 安装目录下(/var/lib/zerotier-one)建立文件夹 moons.d,将生成的 .moon文件拷贝进去。  
  19. 重启 zerotier,重启电脑。至此,VPS 上(moon 服务器)配置完成。  
  20.   
  21. 客户机连接moon节点  
  22. 其他虚拟局域网中的机器想要连接到 moon 节点的话有两种方法。  
  23.   
  24. 第一种方法就是使用 zerotier-cli orbit 命令。  
  25. 使用之前步骤中 moon.json 文件中的 id 值 (10 位的字符串)分别在客户端机器里执行:  
  26.   
  27. zerotier-cli orbit <id> <id>  
  28. 完成(一般来说这两个id都是相同的)  
  29.   
  30. [root@idv-36f9d5 ~]# zerotier-cli orbit 3ed7c***** 3ed7c*****  
  31. 200 orbit OK  
  32. 第二种方法是需要在 /var/lib/zerotier-one 目录下新建 moons.d 文件夹和 moon 节点一样,将 000000xxxx.moon 文件放到其中,并重启 zerotier。  
直接使用Zerotier-cli orbit id id 会更方便一点。

 

fpdf: This PDF document probably uses a compression technique

 使用fpdf读取PDF文件时,报错:This PDF document probably uses a compression technique which is not supported by the free parser shipped with FPDI. (See https://www.setasign.com/fpdi-pdf-parser for more details)

 
提示这个文件是采用了一个压缩格式,到官网上查看之后,发现他们提供了fpdi-pdf-paser2,但是这是收费的。。。啊啊啊,短时间内先忽略吧。毕竟这样的PDF不多。
 
后面再关注一下有没有类似的东西。
 
1、安装pdf-parser2 : FPDI PDF-Parser 2.x (setasign.com)
2、查看这里的测试代码和示例:https://www.setasign.com/products/fpdi-pdf-parser/details/
 
目前我是放弃了,因为,他develop version,要100欧,然而这只是我自己用来测试,没必要。
------
后记:
1、读了PDF的第一行,发现这个PDF版本是PDF1.5,尝试用chrome打开,另存为,无效。选择打印->另存为PDF,成功
2、网上也有教程,建议是使用ghostscript来处理,比如:php - FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI - Stack Overflow,代码比较简单:
PHP代码
  1. // USE GHOSTSCRIPT IF PDF VERSION ABOVE 1.4 AND SAVE ANY PDF TO VERSION 1.4 , SAVE NEW PDF OF 1.4 VERSION TO NEW LOCATION   
  2. <?php   
  3. exec('gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="'.$srcfile_new.'" "'.$srcfile.'"');  
  4.  ?>  
结果,官网上没有mac的可执行文件,又不想编译,所以纯记录一下吧
 
-----
0227更新:
GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
GPL Ghostscript 9.50: Cannot open X display `(null)'.
**** Unable to open the initial device, quitting.
 
纠结。