使用https://www.github.com/yeszao/dnmp搭建php8.0.3环境

基本的安装步骤请看官方文档,这里仅就php8说一下。之前7及以下版本直接按指示操作即可,没有遇到问题,如果遇到github等网络不通的情况,等一等再试,或者想办法出个国。

需要php8的,打开.env将php7下的版本号直接改为8.0.3,或者复制php7的配置新建一个php8。

#
# PHP7
#
# Available PHP_EXTENSIONS:
#
# pdo_mysql,zip,pcntl,mysqli,mbstring,exif,bcmath,calendar,
# sockets,gettext,shmop,sysvmsg,sysvsem,sysvshm,pdo_rebird,
# pdo_dblib,pdo_oci,pdo_odbc,pdo_pgsql,pgsql,oci8,odbc,dba,
# gd,intl,bz2,soap,xsl,xmlrpc,wddx,curl,readline,snmp,pspell,
# recode,tidy,gmp,imap,ldap,imagick,sqlsrv,mcrypt,opcache,
# redis,memcached,xdebug,swoole,pdo_sqlsrv,sodium,yaf,mysql,
# amqp,mongodb,event,rar,ast,yac,yaconf,msgpack,igbinary,
# seaslog,varnish,xhprof,xlswriter
#
# You can let it empty to avoid installing any extensions,
# or install multi plugins as:
# PHP_EXTENSIONS=pdo_mysql,mysqli,gd,curl,opcache
#
#PHP_VERSION=7.4.7
PHP_VERSION=8.0.3
PHP_PHP_CONF_FILE=./services/php/php.ini
PHP_FPM_CONF_FILE=./services/php/php-fpm.conf
PHP_LOG_DIR=./logs/php
PHP_EXTENSIONS=mysql,pdo_mysql,mysqli,mbstring,gd,curl,opcache,redis,xdebug,imap,mcrypt,zip

如上,用docker-compose build php然后docker-compose up php。

这个时候打开php项目,有可能会报could not find driver的错误。那就是mysql的扩展没装好。

可以用下面的办法来安装:

docker exec -it php /bin/sh

install-php-extensions pdo_mysql
同理,也可以安装redis扩展install-php-extensions redis
这时候打开phpinfo看看有没有pdo_mysql和redis。

如果需要在本地打开xdebug,还是用上面的办法install-php-extensions xdebug
这时候,还需要修改一下php.ini,因为xdebug最新是3的版本了,配置项改了。

把原来的xdebug配置改成下面的即可。
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
; Set to host.docker.internal on Mac and Windows, otherwise, set to host real ip
xdebug.remote_host = 192.168.100.100
; xdebug.remote_port = 9000
xdebug.remote_autostart=1
xdebug.remote_log = /var/log/php/xdebug.log


xdebug.mode=debug
xdebug.client_host=192.168.100.100
xdebug.start_with_request=yes
xdebug.log=/var/log/php/xdebug.log
如果用vscode调试的话,在.vscode下面创建launch.json并填入:
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/www/shang/openexhibitions/api": "${workspaceRoot}"
            }
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9003
        }
    ]
}

注意,端口号是9003,之前xdebug是9000

ASUS RT-AC68U神器启用

新买了一个电视机顶盒mecool KM6,这玩意激活还需要出国留学(这个词是在淘宝上学的),所以在KM6到货之前就在琢磨拿什么来突破了,家里有个老思科的路由器,虽然慢点,但应该还是能用的吧,结果等配置的时候发现,还真是连不上了,于是只好拿笔记本,接上网线上网,然后通过wifi共享网络出来,幸好官方有教程,按照步骤操作下来,成功留学,顺利激活。

KM6跑起腾讯的云视听一点问题没有,反应超快,但是光看一个云视听太可惜了。那就需要长期假设一个出国通道。咨询了华三做SDN的同学,放弃了采用融合网关的方案,那就是准备一个专用的路由器就行了,物理切换网络是最直接有效的。

但是之前配置的这台电脑毕竟不能一直放在家里做留学使用,所以换了一台旧电脑顶上,2010年买的小黑X1,但是很快就发现,KM6跑起来并不爽。考虑再下,下定决心,再投巨资采购一台ASUS RT-AC68U,这个型号在支持设备清单里是次顶配。淘宝下单花了499个软妹币。

到货后,发现专业路由器就是比TPlink的强,配置真复杂,截图就不发了,直接按教程找到系统配置中的升级固件功能,将下载下来的专用升级固件上传上去,重启(留学中介说是会自动重启,我这里被提示要手动重启,所以就断电重启路由器就好了)。

再连上,发现连DHCP的网关都变了,修改地址,重新进入路由器配置界面,靠,发现完全变了,超级复杂的配置界面没有了,只剩下那红色的经典配色,然后输入激活码,然后,然后,就发现已经连接成功。虽然,华硕这超级牛的路由器的其他那些功能暂时用不上了,但这就行了,插电即用。

接下来,打开油管看看,还是有点卡,于是把接入点从联通光猫的百兆口,换到了千兆口下接的TP的千兆口上,速度明显提升,甚至直接从新加坡回国看云视听都不卡顿。

校友们已经开始关注养老产业了

校友会一般最积极的都是搞保险业务的校友,无论在上海还是在北京,这大概是业务推广需要,好在我们这位校友虽然组织活动,拉群,倒也没有很过分的推销业务。

最近这位仁兄开始关注养老产业了,前两年,借着我老婆考察社区养老,我也去转过两家,稍微有点了解,社区养老真的是个公益行业,没点修养的很难坚持下来。还有一类就是高端养老产业,现在大家有兴趣的大概是这种,一个老人月费用在一万以上的,否则不太可能有多大利润空间。但真的做起来,投资也不会小。我现在关注的倒不是这个点,而是校友去视频体验养老基地的时候,提到过那里一般不对外开放,避免对老人们过度打扰。

我还没到规划自己养老的阶段,也没有考虑过要把父母送去养老院,但是如果去,我确实想想不到要住在一个封闭的养老院里,而不是相对开放的社区,只是那个社区的基础设施对老人更友善。有机会还是要去实地看看。

过年的时候,同村的两位老人在北京,家里不算缺钱,但考察了一圈还是选择居家,除了观念问题,不知道是不是也担心进去就出不来了。

github被封之后

github被封之后,就有更多的vpn需求,也会冒出更多国产镜像软件。

这样不好,技术本来很简单,一起玩才好,实际上更多的还是借用,搭便车,当然,用的时候也是给原创者一个正向反馈,不管你是否提交过pr。

封掉的话2021后的新程序员恐怕很多就不知道有github了,对老程序员保持竞争力倒是个好事情。

无用的知识:apt upgrade时pkg.jenkins.io无法连接造成jenkins启动失败

时常需要给服务器打打补丁,执行apt update后执行apt upgrade,但是奇怪的是jenkins升级后就挂了。

没有改什么配置,没有增加什么新的应用。用apt remove jenkins再apt install jenkins也不行。

Setting up jenkins (2.263.1) ...
Job for jenkins.service failed because the control process exited with error code.
See "systemctl status jenkins.service" and "journalctl -xe" for details.
invoke-rc.d: initscript jenkins, action "start" failed.
● jenkins.service - LSB: Start Jenkins at boot time
     Loaded: loaded (/etc/init.d/jenkins; generated)
     Active: failed (Result: exit-code) since Tue 2021-01-19 10:09:42 CST; 12ms ago
       Docs: man:systemd-sysv-generator(8)
    Process: 4798 ExecStart=/etc/init.d/jenkins start (code=exited, status=7)

Jan 19 10:09:41 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: Starting LSB: Start Jenkins at boot time...
Jan 19 10:09:41 iZ8vbajeqj6nb198cbbtgsZ jenkins[4798]: Correct java version found
Jan 19 10:09:41 iZ8vbajeqj6nb198cbbtgsZ jenkins[4798]:  * Starting Jenkins Automation Server jenkins
Jan 19 10:09:42 iZ8vbajeqj6nb198cbbtgsZ jenkins[4798]:    ...fail!
Jan 19 10:09:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: jenkins.service: Control process exited, code=exited, status=7/NOTRUNNING
Jan 19 10:09:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: jenkins.service: Failed with result 'exit-code'.
Jan 19 10:09:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: Failed to start LSB: Start Jenkins at boot time.
dpkg: error processing package jenkins (--configure):
 installed jenkins package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 jenkins
E: Sub-process /usr/bin/dpkg returned an error code (1)

试过netstat -apn | grep 8080看端口占用,先是发现过阿里云盾,还以为是中毒了,用top看看cpu占用,不像。

把端口改成8888,也不行。

然后改天,直接执行apt update后执行apt upgrade就好了。原来就是pkg.jenkins.io不能连接造成的。

中间还曾经怀疑过java的问题,网上不少说是java没设置好或者缺少$JAVA_HOME的。并不解决我的问题。

再单独发一下jenkins状态的故障查询。

root@iZ8vbajeqj6nb198cbbtgsZ:~# systemctl status jenkins.service
● jenkins.service - LSB: Start Jenkins at boot time
     Loaded: loaded (/etc/init.d/jenkins; generated)
     Active: failed (Result: exit-code) since Mon 2021-01-18 17:30:42 CST; 1min 56s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1878 ExecStart=/etc/init.d/jenkins start (code=exited, status=7)

Jan 18 17:30:41 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: Starting LSB: Start Jenkins at boot time...
Jan 18 17:30:41 iZ8vbajeqj6nb198cbbtgsZ jenkins[1878]: Correct java version found
Jan 18 17:30:41 iZ8vbajeqj6nb198cbbtgsZ jenkins[1878]:  * Starting Jenkins Automation Server jenkins
Jan 18 17:30:42 iZ8vbajeqj6nb198cbbtgsZ jenkins[1878]:    ...fail!
Jan 18 17:30:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: jenkins.service: Control process exited, code=exited, status=7/NOTRUNNING
Jan 18 17:30:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: jenkins.service: Failed with result 'exit-code'.
Jan 18 17:30:42 iZ8vbajeqj6nb198cbbtgsZ systemd[1]: Failed to start LSB: Start Jenkins at boot time.

无用且过时的知识:Android studio配置国内镜像源

推荐的几个国内镜像源地址:

1、东软信息学院(笔者当前在用)

mirrors.neusoft.edu.cn     端口:80
2、北京化工大学

ubuntu.buct.edu.cn/ubuntu.buct.cn  端口:80
3、中国科学院开源协会

mirrors.opencas.cn (mirrors.opencas.org/mirrors.opencas.ac.cn)    端口:80
4、上海GDG镜像服务器

sdk.gdgshanghai.com   端口:8000
5、电子科技大学

mirrors.dormforce.net  端口:80

网上搜一下基本上都是这个内容,只是目前不需要了,而且如果按照这个设置了的话,很可能还会额外造成问题,因为这些镜像要么不存在,要么已经不维护了。

总体上来说,能够正确看待开发资源这个事情,是一点点进步。来自“资本主义”的安卓,本身没有什么罪恶,至少咱们还可以改个名字叫鸿蒙。

当然,谷歌也是有妥协的,专门给中国开发者弄了个中文站点。

Library/Application\ Support/Google/AndroidStudio4.1

mac上Android Studio重装了新版之后提示/Users/mengfanyong/Library/Application\ Support/Google/AndroidStudio4.1无法访问。

那就是没权限呗。有两种解决方案:

(1)sudo /Applications/Android\ Studio.app/Contents/MacOS/studio

用以上命令直接用管理员身份启动,但这样很麻烦。

(2)另一种是直接解决这个文件夹权限的问题:

cd /Users/mengfanyong/Library/Application\ Support/Google 
mkdir AndroidStudio4.1
sudo chmod -R 775 /Users/mengfanyong/Library/Application\ Support/Google/AndroidStudio4.1

很奇怪Android Studio为什么不调起管理员权限请求,把这个目录创建一下。希望下个版本能修复。

vue中使用fingerprintjs生成终端id

安装组件:

npm i @fingerprintjs/fingerprintjs -S
# or
yarn add @fingerprintjs/fingerprintjs -S

创建一个async的methord:

async asyncCall() {
      // We recommend to call `load` at application startup.
      const fp = await FingerprintJS.load()

      // The FingerprintJS agent is ready.
      // Get a visitor identifier when you'd like to.
      const result = await fp.get()

      // This is the visitor identifier:
      const visitorId = result.visitorId

      console.log(visitorId)
      return visitorId
    }

在业务代码中使用:

this.asyncCall().then(res => {
            const terminalId = res
            that.$api
              .Login({
                employeeNumber: that.formLogin.employeeNumber,
                password: that.formLogin.password,
                terminalId: terminalId,
                terminalType: that.formLogin.terminalType
              })
              .then(() => {
              // 登录成功后的操作
               
              })
          })

弃坑墨刀,转用Pencil Project

用了两年的企业版墨刀,今年决定不续费了,太贵了,不好意思让公司掏钱买。

看了下,在墨刀上也攒了不少项目了。这算是这两年的钱没有白掏,至少比之前见不到任何项目痕迹要好得多。

但是如何留存项目过程的设计文档,如何更好地进行版本管理,如何更好地同步团队的开发进度,多模块交叉开发,始终是一个问题,不希望过多的精力放在需求管理上,但放得太粗了,没有一个特别紧密配合默契的团队是很难进行的好的。

暂时用Pencil Project,然后基于它想办法来实现在线同步。

大造谣者和大辟谣者们已经开启了第三次世界大战

工业革命的成果改变了战争的形态和范围,促成了第一次和第二次师姐世界大战。

信息化的发展让大人物以为获得了新的战力,并将以此作为战争角力的核心。

以造谣和辟谣为基本战争形态的“第三次世界大战”已经开始。

战争只是一种激烈的促销方式,一战和二战卖的是生存,三战卖的主要是幸福。人类还是在向更高阶发展。