About liudon | 流动

喜欢做梦的80后男生。

The RSS's url is : https://liudon.com/index.xml

Please copy to your reader or subscribe it with :

Preview of RSS feed of liudon | 流动

你好 Follow

2024-09-17 00:53:38

Follow: Next generation information browser.

最近博客圈开始流行Follow邀请码,大家各种求码,一码难求。

蹲在Discord群里一周,虽然时有发码,但最终还是狼多肉少,抢不到码呀。

中秋爬山

2024-09-16 23:56:16

中秋第一天,娃约了同学在公园玩,骑车、滑轮滑,晚上娃带我去了她说非常好吃的一家店吃饭。

晚上回来,想着第二天在家呆一天也是看电视,打算带她爬长城,查了一下,往返的票早已售罄,只好放弃这个方案。

Google Adsense的审核之旅

2024-09-16 23:18:50

中午的时候,突然收到一条消息,打开一看,提示我的Google Adsense审核通过了。

偶然发现Google Adsense里居然有40美金,想起来是之前老博客加的广告。

让你的IPFS站点持久在线:接入Filebase的Names(IPNS)服务

2024-09-04 22:39:37

本文会介绍如何接入filebase的Names(IPNS)服务,使你的IPFS站点持久在线。

背景

周末更新博客时,发现workflow的上传IPFS任务执行失败了。

一次简短的青岛之行

2024-08-31 21:24:53

刚放暑假的时候,就答应了娃带她去一趟青岛。

8月份要回老家,所以定在了7月中下旬出发。

车票/酒店都订好了,结果来了个台风格美。

出发前一周一直在查天气,就怕去了一直下雨。

解决 "undeclared name: any (requires version go1.18 or later)" 编译错误

2024-06-14 20:41:20

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
$ 
$ protoc-gen-go --version
protoc-gen-go v1.34.2
$ 
$ sh make.sh
user.pb.go:123:45: undeclared name: any (requires version go1.18 or later)
$ 

流水线编译报错,其中make.sh文件代码:

...

protoc -I=./ --proto_path=./ --go_out=./ --go_opt=paths=source_relative user.proto 

...

go build

同样的代码在本机编译就没问题,但是放到流水线里编译就报上面的错误。

搭建自托管IPFS Gateway服务,替代Cloudflare的IPFS Gateway

2024-05-22 21:20:20

背景

4月底的时候,Livid大佬提醒,Cloudflare应该是调整了IPFS Gateway网关策略,我的IPFS镜像博客无法访问了。

没查到Cloudflare的调整说明,不过还好IPFS官方也提供了公共网关gateway.ipfs.io,将域名解析改到官网网关。

302跳转的跨域问题(CORS)

2024-05-17 20:13:57

302跳转的跨域问题

场景一:302不返回跨域头

请求

GET /302 HTTP/1.1
Host: liudon.xyz
Origin: https://www.baidu.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

返回

HTTP/1.1 200 OK
Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Cf-Ray: 88535773eaf5107e-HKG
Content-Length: 143
Content-Type: text/html
Date: Fri, 17 May 2024 11:42:00 GMT
Expires: Thu, 01 Jan 1970 00:00:01 GMT
Location: https://liudon.org
Server: cloudflare
Vary: Accept-Encoding

浏览器报错

GORM增加sqlcommenter特性

2024-04-18 21:25:24

什么是sqlcommenter?

sqlcommenter is a suite of middlewares/plugins that enable your ORMs to augment SQL statements before execution, with comments containing information about the code that caused its execution. This helps in easily correlating slow performance with source code and giving insights into backend database performance. In short it provides some observability into the state of your client-side applications and their impact on the database’s server-side.

源码分析:GORM是如何生成sql的

2024-04-18 21:14:24

gorm下实现sqlcommenter过程中,遇到一些问题,顺便把gorm整个流程梳理了一遍,整理记录一下。

gorm使用示例

package main

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

type Product struct {
  gorm.Model
  Code  string
  Price uint
}

func main() {
  // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  
  var product Product
  db.First(&product, 1) // 根据整型主键查找
}

我们以First查询为例,看一下是怎么转成具体sql的。

工银亚洲网银密码重置

2024-03-16 10:09:59

18年的时候办了张工银亚洲的银行卡,好几年没有用过了。

今年想起来了,发现网银登不上了,密码忘了。

最悲剧的是,试了超过10次,账户冻结了。

打95588咨询了一下,说是可以内地见证方式修改密码,只需要带上港澳通行证和身份证即可。

加速Cloudflare访问

2024-02-21 20:25:49

背景

博客架构

这是当前的博客架构,文件保存在Github仓库,通过Cloudflare Page提供访问。

国内访问情况

众所周知,在国内,Cloudflare的CDN属于反向加速,平均耗时在1.5s左右。

2023年终总结

2024-01-04 18:41:20

2023年过完了,是时候来个总结了。

博客

2023年一共更新了15篇内容,共计12000字。

Google Analytics全年统计

访问Top3的文章:

2023年12月北京暴雪记录

2023-12-16 10:15:33

记录暴雪下普通打工人的生活。

12月14日 周四

北京的雪已经连着下了两天了。

12月11日,也是因为下雪,晚上打车打到10点半才叫到车。

所以这次下雪后,晚上就早走了。

使用Hugo实现响应式和优化的图片

2023-12-10 08:29:05

继续我们的博客优化之旅,本篇内容我们将介绍如何使用Hugo实现响应式和优化的图片。

问题

在之前文章里,通过腾讯云数据万象实现了图片优化能力,具体的可参考文章累计布局偏移修复方案改进 —— 自动生成图片宽高

经过一段运行后,发现这里有一个弊端。

Run hugo --gc --minify --cleanDestinationDir
Start building sites … 
hugo v0.119.0-b84644c008e0dc2c4b67bd69cccf87a41a03937e linux/amd64 BuildDate=2023-09-24T15:20:17Z VendorInfo=gohugoio

ERROR Failed to get JSON resource "https://static.***.com/64412246-9050f100-d0c1-11e9-893a-f9b0766533ad.png?imageInfo&t=1698674110": Get "https://static.***.com/64412246-9050f100-d0c1-11e9-893a-f9b0766533ad.png?imageInfo&t=1698674110": stream error: stream ID 1; STREAM_CLOSED; received from peer
ERROR Failed to get JSON resource "https://static.***.com/SkRx5uFwQ8Cliyq.jpg?imageInfo&t=1698674110": Get "https://static.***.com/SkRx5uFwQ8Cliyq.jpg?imageInfo&t=1698674110": stream error: stream ID 3; STREAM_CLOSED; received from peer

随着图片数量增多,因为需要调接口查询图片信息,这里构建耗时变长,同时也特别容易出现超时导致构建失败。

加速Google Analytics

2023-12-02 09:25:49

起因

Google Analytics是一款优秀的流量分析服务,集成方便,使用简单。

最近在优化页面访问速度,发现Google Analytics是一个优化点。

优化

1. 访问加速

国内访问Google Analytics很慢,同时还面临着各种广告屏蔽插件拦截。

使用Google Indexing API加速博客收录

2023-10-27 19:32:24

对于一个新站点来说,总是想着能让搜索引擎快点收录网站内容。

今天,我们就来介绍一种利用Google Indexing API接口,通过Github Actions实现部署时通知Google抓取页面内容。

在Netlify上部署Twikoo评论系统

2023-10-19 19:46:32

在本篇文章里,我会介绍如何在Netlify上部署Twikoo评论系统,如何接入到静态博客Hugo,以及如何实现Twikoo系统版本自动更新。

2024年7月30日更新:因为Github接口策略调整,原有的匿名通过接口获取版本号方法失效,已更改为带token方式请求接口获取版本号,详见workflow里Get twikoo version步骤配置。

利用Github Actions定时抓取微博

2023-10-07 13:17:57

背景

在微博上关注了一些用户,比如tk教主月风

但是有些内容过段时间不可见了,所以希望可以定时抓取微博归档备份下来。

实现方案

整体思路:利用Github ActionsScheduled任务,定时执行抓取shell脚本,将内容保存到文件,提交到Github仓库。

北大口腔牙周刮治记录

2023-09-17 15:46:32

病情

上次洗完牙后,还是不时有出血的情况。

前段时间更是出现牙龈劈开一块肉,特别容易塞东西的情况。

于是,又跑到医院来看牙了。

医生检查后,说是牙周病,需要牙周刮治,要约到8月份了。

故乡回忆之旅

2023-09-09 23:19:03

赶在8月底,趁着娃暑假的尾声,回了趟老家。

老家有条俗语,“永福庄的街,三里长”。

这天吃完午饭,临时起意,带媳妇溜溜大街,见识下我们的大街。

小时候,整天在这条街上跑来跑去。

解决Golang使用go get安装包后找不到可执行文件的问题

2023-08-17 09:20:50

背景

编译流水线代码

go get google.golang.org/protobuf/cmd/protoc-gen-go@latest

protoc -I=./zzz --proto_path=./xx --go_out=./abc --go_opt=paths=xx.proto

...

go build -o xxx

在go升级到1.20.1版本后,执行报错。

protoc-gen-go: program not found or is not executable

解决

Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.

In a future Go release, go get will no longer build packages; it will only be used to add, update, or remove dependencies in go.mod. Specifically, go get will act as if the -d flag were enabled.

修正Hugo的JSON Feed格式

2023-03-25 14:11:18

问题背景

前几天在Planet里follow自己的web3博客,遇到下面的错误。

PlanetFeedError

经过Livid大佬提醒,说是网站的JSON Feed不是标准格式导致的。

因为我的已经修正没法截图,这里以dvel的博客举例,格式类似如下。

[
  {
    "content": "用 ChatGPT 写一些小脚本真是太方便了。\nGPT-4 发布后试了试,还是蛮不错的,代码是 ChatGPT 生成的。\n几个来回就可以编写一个能正常使用的油猴脚本:\n(略,HTML 代码) 在 https://chdbits.co/bakatest.php 有如上内容。 我要为这个网页编写一个油猴脚本。 通过自动获取 ChatGPT 的 API 来解析此问题的答案,供用户参考。 将内容输出到 `#outer > h1` 的下面,同时输出你提取到的问题内容和答案,以便我看看你是否提取正确。 获取错啦。 问题的获取路径是 `#outer > form > table > tbody > tr:nth-child(1) > td` 选项的获取路径是 `#outer > form > table > tbody > tr:nth-child(2) > td` 使用这个 API: ``` curl https://api.openai.com/v1/chat/completions \\ -H 'Content-Type: application/json' \\ -H 'Authorization: Bearer YOUR_API_KEY' \\ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Say this is a test!"}], "temperature": 0.7 }' ``` 响应格式为: ``` { "id":"chatcmpl-abc123", "object":"chat.completion", "created":1677858242, "model":"gpt-3.5-turbo-0301", "usage":{ "prompt_tokens":13, "completion_tokens":7, "total_tokens":20 }, "choices":[ { "message":{ "role":"assistant", "content":"\\n\\nThis is a test!" }, "finish_reason":"stop", "index":0 } ] } ``` 它没有最近的互联网数据,所以还是需要把 API 的使用方式发给它。\n然后它就帮我写好了,我不用复习 JavaScript,不用看油猴脚本的教程和文档,也不用查 @grant 等等标记是干嘛的。\n可以再继续要求它改进一些,比如换个输出位置,优化 prompt,自动选中正确回答,支持单选题和多选题等等。\n效果展示:\n安装: https://greasyfork.org/zh-CN/scripts/461944-chd-quiz-answer\n",
    "permalink": "https://dvel.me/posts/chd-quiz-answer/",
    "summary": "用 ChatGPT 写一些小脚本真是太方便了。\nGPT-4 发布后试了试,还是蛮不错的,代码是 ChatGPT 生成的。\n几个来回就可以编写一个能正常使用的油猴脚本:\n(略,HTML 代码) 在 https://chdbits.co/bakatest.php 有如上内容。 我要为这个网页编写一个油猴脚本。 通过自动获取 ChatGPT 的 API 来解析此问题的答案,供用户参考。 将内容输出到 `#outer > h1` 的下面,同时输出你提取到的问题内容和答案,以便我看看你是否提取正确。 获取错啦。 问题的获取路径是 `#outer > form > table > tbody > tr:nth-child(1) > td` 选项的获取路径是 `#outer > form > table > tbody > tr:nth-child(2) > td` 使用这个 API: ``` curl https://api.openai.com/v1/chat/completions \\ -H 'Content-Type: application/json' \\ -H 'Authorization: Bearer YOUR_API_KEY' \\ -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "Say this is a test!",
    "title": "CHD 油猴脚本:每日签到自动答题"
  },
  ...
]

下面是一个JSON Feed的示例,详细规范见jsonfeed.org

我的学车之路

2023-03-24 20:48:24

之前在2022年终总结提到过,我在练车考驾照。

就在昨天,终于拿证了。👏👏👏

咱也是可以上路开车的人了,虽然比别人晚了快10年才拿证。🐶

2022年6月11日,在海淀驾校报名,周末连续班,报名费5380元。

2022年10月12日,科目一考试通过。

2022年10月22日,科目二模拟驾驶。

2022年11月13日,科目二第一次上车练习。

2022年11月24日,疫情严重,驾校发通知,自11月25日暂停培训。

2023年2月4日,年后驾校恢复培训,继续科目二练车。

2023年2月13日,科目二考试通过。

2023年3月11日,科目三上路练习。

2023年3月23日,上午科目三考试通过,下午科目四考试通过。
考试的时候,早上遇到临时交通管制,一直到9点40才开考。
考完回来,班车上的人说又管制不能考了。
班车拉回驾校,剩下的人中午加班考试。

终于不用再5点半起床赶班车了。🥱

将博客部署到星际文件系统(IPFS)

2023-02-21 19:46:58

在这篇文章,我将会介绍如何利用Github Actionshugo博客自动部署到IPFS上,并通过自定义域名访问IPFS上的文件。

IPFS(InterPlanetary File System)中文称为星际文件系统,是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议。

新冠疫情后的第一个春节

2023-02-16 20:56:38

下面的内容是由chatGPT润色生成的。

AI太强大了 😂

当我还是个孩子的时候,在看春节晚会时,总会有节目介绍那些不能回家过年的人。

但我从未想过,等我长大后,我也会成为其中的一员。

第一次清理键盘

2023-01-16 14:43:38

19年生日的时候,媳妇送了一款flico的机械键盘。

这次搬家后,想着年前清理下键盘,实在是太脏了。

周五下班,带上键盘回家。

2022年终总结

2023-01-12 07:21:20

2022年已经过去1周多了,记录一下我的2022年。

疫情

2022年,是新冠疫情的第三年,也是切身感受到的一年。

3月22日晚,8点半和同事刚上13号线地铁。

去掉Cloudflare烦人的email-decode.min.js请求

2022-08-26 23:25:57

通过WebPageTest页面测试,发现一个/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js的文件请求,影响到了页面渲染。

累计布局偏移修复方案改进 —— 自动生成图片宽高

2022-08-24 12:37:22

本站已不再采用本方案,新方案见使用Hugo实现响应式和优化的图片

遗留的问题

上一篇文章讲了我是如何解决博客累计布局偏移的问题,但是这个方案存在一个很大的问题。

手动输入每张图片的宽高

这就要求每次插入图片后,需要手动查看图片宽高,修改插入代码,导致整个流程变得繁琐,无法自动化。

优化博客的累计布局偏移(CLS)问题

2022-08-20 07:27:22

此文已过期,优化方案参考累计布局偏移修复方案改进 —— 自动生成图片宽高.

问题表现

7月份将博客部署由Github迁移到Cloudflare后,开始关注博客的性能问题。

偶然看到苏卡卡大佬的CLS优化文章,拿自己博客也测试了下,发现也存在同样的问题。

将博客部署到Cloudflare Pages

2022-07-29 23:16:01

目前博客是部署到了Github Pages上,具体实现见博客架构说明

缘由

Github Pages部署有一个问题,就是不支持HSTS

HTTP Strict Transport Security(通常简称为HSTS)是一个安全功能,它告诉浏览器只能通过 HTTPS 访问当前资源,而不是HTTP。

奥林匹克公园向日葵之旅

2022-07-21 20:40:20

媳妇有事回老家了,这两天自己带娃。

小区群里有人说奥林匹克公园的向日葵开了,适合拍照。

正好周六多云,没有太阳,出门遛娃。

带上我好久不用的相机,省得发霉了。

记第二次洗牙

2022-06-21 21:58:49

最近刷牙的时候,牙龈总是出血。

距离上一次洗牙,已经有好几年了,感觉又该去洗一下牙了。

上次跟媳妇两个人,在小区外面的私人诊所洗的,俩人花了1000多块钱。

记录2022年海淀幼升小

2022-05-25 20:10:01

20220525202612

18年的热点新闻,纳税千万孩子无法在北京上学。

一直听说外地人在北京上学难,今年娃到了上小学的年纪,也算真实的体验了一把上学的难。

Golang解析json的一个问题

2022-05-20 21:18:23

业务模块从php迁移到golang下了,最近遇到一个golang下json解析的问题:

请求接口,按返回包字段判断请求成功与否。

伪代码如下:

package main

import (
	"encoding/json"
	"fmt"
)

type Response struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func main() {
	// 场景1,返回包符合接口要求
	str := `{"code":100,"msg":"failed"}`
	var res Response
	json.Unmarshal([]byte(str), &res)
	fmt.Printf("res=%+v\n", res)
    // 解析正确,符合预期
	// res={Code:100 Msg:failed}

	// 场景2,返回包不符合接口要求,缺少相关字段
	str = `{"retCode":100,"retMsg":"failed"}`
	var res1 Response
	json.Unmarshal([]byte(str), &res1)
	fmt.Printf("res=%+v\n", res1)
    // 解析错误,不符合预期
	// res={Code:0 Msg:}
}

这里由于接口地址配置错误,导致请求到其他接口,返回包不符合协议要求。

疫情下的生活

2022-05-20 19:17:57

20220520-192500@2x

不知不觉,北京这一波疫情已经一个月了,目前还是每天50例左右新增。

昨天看新闻,基本没有社会面新增了,感觉要解封了。

没想到今天直接被打脸,封控升级了。

整理下博客的一些调整

2022-05-13 18:20:52

新域名上线一段时间了,通过Google Search Console发现了一些问题,整理下最近进行的一些调整。

  1. 更新主题版本,展示文章tag标签 通过对比主题作者的网站,发现使用的不是最新代码。

疫情下的五一假期

2022-05-05 20:22:23

五一假期前一周,北京疫情又起,说是已经隐蔽传播一周了。

当天晚上大家就开始屯货了,晚上看着APP里可买的东西一点点没了。

说实话,出现几粒确诊没有慌,这么抢购搞的有点心慌了,也下单买了点东西。

自己动手,更换thinkpad x1硬盘

2022-04-22 08:04:18

电脑突然没法用了,提示"A disk read error occurred"的错误。

491650584526_.pic

多次重启也不行,感觉是硬盘挂了。

机器去年过保了,之前有过在售后维护的经历,费用不低,这次决定自己动手。

二刷百望山

2022-04-17 22:57:41

又是周末,娃约了小伙伴一起爬山。

百望山,二刷走起。

约好了9点半门口见面,早上睁眼8点了,赶紧起床洗漱吃饭。

出门晚了,还打不到车,快10点才到。

小伙伴和人爸爸已经先爬上去了,带着娃一路小跑,20分钟从大门爬到山上。

带娃游颐和园

2022-04-11 00:37:55

上周的北海之行,本来是想划船的,可惜人太多没有划成,答应娃这周末带她去划船。

周六7点准时起床,得早点去省得人多排队。

8点半吃完饭洗漱完出发,特意带娃坐了一趟双层公交车 —— 二楼第一排观光区。

博客架构说明

2022-04-10 20:41:57

在拿到liudon.com域名前,手中已有两个域名:

两套域名说明

liudon.org已经不再更新,仅作归档使用。 liudon.xyz当时是静态博客流行,尝鲜使用。

难得的清明假期

2022-04-06 08:06:19

前面有写到,被隔离了一周,好在赶在假期开始前解除了隔离。

趁着这次难得的假期,外出放松一下。

  1. 爬百望山。

    娃是第一次爬山,百望山不高,适合带娃体验爬山,我也从13、14年之后没再爬过山了。

十一年的等待,终于拿到了liudon.com域名

2022-04-01 01:24:05

关于部分,有写域名的来历。

当时liudon.com已经被注册,所以只好注册了liudon.org

2011年注册的liudon.org,最早用wordpress搭建了博客。

被隔离的一周

2022-04-01 01:20:39

从没有想过疫情会离自己这么近,记录一下。

周一的时候说是有确诊同学来过公司,下午组织全员核酸,做完核酸立马回家。

周二早上全员核酸阴性,继续到公司上班。

mysql中字符串和整型自动转换的问题

2020-12-14 18:47:29

表结构如下

desc info;
+-------+-----------------+------+-----+---------+----------------+
| Field | Type            | Null | Key | Default | Extra          |
+-------+-----------------+------+-----+---------+----------------+
| id    | int(8) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20)     | YES  |     | NULL    |                |
+-------+-----------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

执行sql.

insert into info values ('', 'xxx');
insert into info values ('', 'yyy');

查询记录.

select * from info;
+----+------+
| id | name |
+----+------+
|  1 | xxx  |
|  2 | yyy  |
+----+------+
2 rows in set (0.00 sec)

执行下面sql.

一次惊心动魄的Mysql更新操作

2020-05-19 17:16:53

问题描述

# 表结构
MySQL > desc user_packages;
+----------------+---------------------+------+-----+---------------------+----------------+
| Field          | Type                | Null | Key | Default             | Extra          |
+----------------+---------------------+------+-----+---------------------+----------------+
| up_id          | bigint(20) unsigned | NO   | PRI | NULL                | auto_increment |
| start_date     | date                | NO   |     | NULL                |                |
| end_date       | date                | NO   |     | NULL                |                |
| up_created     | datetime            | NO   | MUL | 0000-00-00 00:00:00 |                |
| up_updated     | datetime            | NO   |     | 0000-00-00 00:00:00 |                |
+----------------+---------------------+------+-----+---------------------+----------------+
5 rows in set (0.00 sec)

MySQL > select * from user_packages limit 5;
+-------+------------+------------+
| up_id | start_date | end_date   |
+-------+------------+------------+
|   185 | 2018-04-01 | 2018-06-30 |
|   186 | 2018-04-01 | 2018-06-30 |
|   187 | 2018-04-01 | 2018-06-30 |
|   188 | 2018-04-01 | 2018-06-30 |
|   189 | 2018-04-01 | 2018-06-30 |
+-------+------------+------------+
5 rows in set (0.00 sec)

操作过程

需要更新某条记录的end_date字段,执行sql如下:

如何在北京公积金网站上修改婚姻状况

2020-01-17 17:14:32

关于取消住房公积金提取业务纸质申请表及部分业务网上办结的公告

时间:2020年01月08日

来源:http://gjj.beijing.gov.cn/web/zwgk/_300583/zxzysx/675803/index.html

PHP7.2编译安装后没有php.ini文件的问题

2019-11-26 19:56:18

下载PHP7.2源码,编译安装。

[root@VM_73_135_centos ~/swoole-src-4.4.12]# php -v
PHP 7.2.25 (cli) (built: Nov 26 2019 19:33:23) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
[root@VM_73_135_centos ~/swoole-src-4.4.12]# 

安装Swoole。

phpize && \
./configure && \
make && make install

安装完,准备修改php.ini文件,结果没找到。

检测网站支持的SSL/TLS协议版本

2019-11-14 14:48:08

Chrome 72及以上版本不支持TLS 1.0和TLS 1.1,访问TLS 1.0或1.1证书的站点会告警,但不阻止用户访问站点。

为了解决Chrome的这个问题,今天升级了下Nginx的TLS协议版本,这里记录一下如何检测支持的协议版本。

记一次难忘的手术经历

2019-10-28 19:03:31

有痔青年的手术经历

十一假期经历

2019-10-08 13:13:36

今年的十一火车票非常难抢,12306的候补订单,一直等到时间截止也没订上票。

只好请了2天假,提前回家了,给自己也放个假休息一下。


回家的几个经历:

  1. 家里的老洗衣机光荣退休了,年龄比我都要大,爸妈舍不得换一直用着。

Swoft 框架运行分析(五) —— ConsoleProcessor模块分析

2019-09-26 13:14:23

这里以Swoft启动http server为例。

php bin/swoft http:start

执行上述命令,启动http server。

在前面第一篇文章的时候,提到了如何启动http服务。

今天我们就来看一下http服务是如何启动的,具体实现就在ConsoleProcess这个模块。

Swoft 框架运行分析(四) —— EventProcessor模块分析

2019-09-26 13:02:18

今天我们来看一下EventProcessor的实现。

/**
    * Handle event register
    * @return bool
    */
public function handle(): bool
{
    if (!$this->application->beforeEvent()) {
        CLog::warning('Stop event processor by beforeEvent return false');
        return false;
    }

    /** @var EventManager $eventManager */
    $eventManager = bean('eventManager');
    [$count1, $count2] = ListenerRegister::register($eventManager);

    CLog::info('Event manager initialized(%d listener, %d subscriber)', $count1, $count2);

    // Trigger a app init event
    Swoft::trigger(SwoftEvent::APP_INIT_COMPLETE);

    return $this->application->afterEvent();
}

获取eventManagerBean实例,对应为Swoft\Event\Manager\EventManager类。

一个git submodule update引发的问题

2019-09-06 15:13:51

背景

1月份的时候,用hugo搭了这套博客系统。

本机写md文件,更新到github,然后通过travis-ci自动发布。

jane主题是通过git submodule引入的,.gitmodules文件内容。

一个Curl的耗时长的问题

2019-09-04 11:07:46

发现某个接口请求很慢,但是后端确认接口是很快的。

在机器上通过shell执行curl命令,确实很快,但是PHP代码里请求又确实很慢。

业务里用到了Requests这个库,一开始以为是这个库导致的问题。

Swoft 框架运行分析(三) —— BeanProcessor模块分析

2019-09-02 18:29:06

今天讲一下BeanProcessor模块,先看一下handle方法实现。

/**
    * Handle bean
    *
    * @return bool
    * @throws ReflectionException
    * @throws AnnotationException
    */
public function handle(): bool
{
    if (!$this->application->beforeBean()) {
        return false;
    }

    $handler     = new BeanHandler();
    $definitions = $this->getDefinitions();
    $parsers     = AnnotationRegister::getParsers();
    $annotations = AnnotationRegister::getAnnotations();

    BeanFactory::addDefinitions($definitions);
    BeanFactory::addAnnotations($annotations);
    BeanFactory::addParsers($parsers);
    BeanFactory::setHandler($handler);
    BeanFactory::init();

    /* @var Config $config*/
    $config = BeanFactory::getBean('config');

    CLog::info('config path=%s', $config->getPath());
    CLog::info('config env=%s', $config->getEnv());

    $stats = BeanFactory::getStats();

    CLog::info('Bean is initialized(%s)', SwoftHelper::formatStats($stats));

    return $this->application->afterBean();
}

先通过getDefinitions方法获取所有的Bean定义。

Swoft 框架运行分析(二) —— AnnotationProcessor模块分析

2019-08-29 19:11:04

上一篇介绍了,SwoftApplication里定义了6个Processor对象。

protected function processors(): array
    {
        return [
            new EnvProcessor($this),
            new ConfigProcessor($this),
            new AnnotationProcessor($this),
            new BeanProcessor($this),
            new EventProcessor($this),
            new ConsoleProcessor($this),
        ];
    }

所有的Processor实现都在framework\src\Processor目录下。

Swoft 框架运行分析(一)

2019-08-29 17:22:28

Swoft 是一款基于 Swoole 扩展实现的 PHP 微服务协程框架。

以前一直都是用的原生swoole框架,最近有时间研究了下衍生的Swoft框架。

刚开始看的时候,感觉自己像个原始人,完全看不懂。

BCMath 与 科学计数

2019-08-16 19:34:34

代码如下

<?php
echo 9.99997600 + 2.4E-5;
echo "\n===\n";
echo bcadd(9.99997600, 2.4E-5, 8);

结果为

10
===
9.99997600

问了朋友,查了各种资料,终于在PHP手册里发现了这段话。

Caution Passing values of type float to a BCMath function which expects a string as operand may not have the desired effect due to the way PHP converts float values to string, namely that the string may be in exponential notation (which is not supported by BCMath), and that the decimal separator is locale dependent (while BCMath always expects a decimal point).

Flink Could Not Resolve Resourcemanager Address

2019-03-28 13:00:50

什么是Flink。

Apache Flink® - Stateful Computations over Data Streams

Flink安装参考(官方文档)[https://ci.apache.org/projects/flink/flink-docs-release-1.7/tutorials/local_setup.html]。

解决Sublime Text安装包时"There Are No Packages Available for Installation"的报错

2019-01-11 17:13:14

今天安装hugofy的包时,一直遇到"There Are No Packages Available for Installation"的错误。 按网上的教程,配置host,配置代理都不起作用。

关于本站

2019-01-10 14:11:09

大家好,欢迎访问我的博客。

建站缘由

大学期间,被人忽悠报了一个计算机培训班,误打误撞的进入了互联网行业。

11年在网友的帮助下,用wordPress搭建了博客,随即开始了我的博主生涯。

2019,新开始

2019-01-09 15:17:04

从2011年开始写博客,博客程序从WordPress换成Typecho。 早就有想法换成静态博客,一直没时间搞。

2019年了,新年新气象,用hugo + github pages搞了个新博客。