分类归档 IT小常识

通过孟繁永

市场监督总局不差钱的推送短信

【市场监督总局】我局已将电子商标文件发送至商标网上服务系统,你已10天未登录该系统,请尽快登录商标网上服务系统查看及下载电子商标文件。

这条短信我每隔10天就能收到一条,这事儿早就不归我管了,我想这是不知道哪个公司给市场监督总局做的系统维护,短信推送每天定时执行一次,将10天没有登录的统一放到推送清单中。但却完全没有考虑推送上限的问题。而这个短信模板也一直没有改过,不知道是涉及哪条商标业务,也不知道是哪个帐号。

老婆最近在考PMP证书,我想市场监督总局的信息中心,或者为其服务的公司想必也应该有这个证,可惜,这么简单的短信推送策略都懒得去优化。

通过孟繁永

php生产环境搭建

更新系统 yum update

Uninstall old versions

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Set up the repository


Install the yum-utils package (which provides the yum-config-manager utility) and set up the stable repository.

 sudo yum install -y yum-utils
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Install Docker Engin

Install the latest version of Docker Engine and containerd, or go to the next step to install a specific version:

sudo yum install docker-ce docker-ce-cli containerd.io

设置自动启动

systemctl enable docker

启动docker

systemctl start docker

查看docker状态

systemctl status docker

安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

上面命令行中可以将版本号替换为最新的版本。docker官网的链接用的是github的,缺德某些地方把这个域名污染了,所以需要换成上面这个地址。

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看docker compose的版本

docker-compose —version
yum install git
cd /
git clone https://github.com/yeszao/dnmp.git

cd /dnmp
docker-compose up -d

通过孟繁永

Laravel中Socialite和easywechat如何选用

Socialite主要针对登录,涵盖了微信的接口,但是不包括微信其他的接口,如支付等。而easywechat是针对微信的全场景方案。

所以在项目中,用easywechat来解决微信方面的需求,在users表之外,创建一个weixins表,来存储微信用户绑定到信息,如果有需要再用socialites表来存储非微信的用户绑定。

在各个平台的接口中,微信的接口是比较变态难调试的,尤其是支付接口,这里再次抱怨一下。

通过孟繁永

使用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的千兆口上,速度明显提升,甚至直接从新加坡回国看云视听都不卡顿。

通过孟繁永

无用的知识: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,然后基于它想办法来实现在线同步。