分类目录归档:未分类

2022 年博客经营报告

过去一年中,个人网站策略做了简单的调整。

大概从去年开始,打算全面使用静态网站了, 使用 hugo 建立了个人主页,本打算替换掉博客, 将当时大部分的文章都迁移到了 hugo 制作的 www 打头的个人主页, 这样的网页很快,很轻,很容易定制, 当时也在定制博客方面收获了很多的成就感。

但是后来发现,这样的博客虽然很简单, 可以很轻易的部署, 但是写文章的感觉并不好, 每次都需要纠结一下用什么编辑器, 写完了还得推送、构建, 每次推送都留意一下自动构建有没有完成, 需要过一阵子才能看到文章, 这对于想要频繁更新内容,或是简单记录转瞬即逝的草稿, 很不友好, 渐渐的自己也不想写东西了。

这时候才知道自己个人博客的好, 使用 typecho 搭建个人动态博客已经三年有余了, 当时有点嫌弃它的“慢”,控制台报错, 第三方主题难以定制, 等等问题, 现在才发现这是很适合写东西的地方, 因为它足够简单, 使用 redis 缓存后速度有了很大提升, 可以随时打开就写, 写好就发, 一气呵成。

于是在今年大概 11 月份, 我重新还是讲个人博客作为更文的主战场, 辅以各种第三方的论坛/博客等, 用来记录生活、记录随想、分享技术。

因此,整体的流量上看, 由于大半年的时间都抱着想要放弃博客的想法, 其流量有了一个后退, 但在后期, 重拾博客之后, 流量开始反升。

下面结合 google analytics 统计报告做一个简单的数据报告:

整体流量

对比上一年,我的 blog 流量有所下降,全年共计获得了 116,101 次访问。

当然在最后两个月,流量对比上一年同期有所上升,这大概也是未来的主要趋势。

我的 www 主页流量有所上升,全年共计获得了 48,066 次访问。

特别是最后几个月,流量有了较大提升。

访客来源

先看一下 blog,

48% 的访客来自搜索引擎,27%来自引用,24%来自直接访问。

趋势方面,来自第三方引用跳转的比例有一个明显提升。

www 主页这边,

81% 的访客是直接访问,看来来到主页的访客是占大头的。

趋势变化上,各个途径的访客数均有提升。

访客画像

先看一下 blog 的,

访客来源国家,最多的还是中国。

这些访客主要分布在中国的北上广深。

大部份是通过 chrome 进行访问。

主要是使用的 winodws 系统进行访问。

移动设备这边则主要是 android。

再来看看主页 www 的。

主要来自中国和俄罗斯,这是我没想到的。

主要分布在北山广深和莫斯科。

浏览器方面使用 Safari 较多,难道都是我自己访问的。

操作系统主要是 IOS,难道真的都是我自己。

移动设备也是 IOS,这难道。。

热门内容

博客 blog 的前十篇热门内容如下:

主页 www 的前十篇是这些:

总结

总的来看,整个网站的流量是有所上升,某些角度的技术文章比较受欢迎,受众主要分布在中国的一线城市,访客主要通过搜索引擎和外部引用跳转来到这里。

新的一年,我将好好利用动态博客快速所见即所得的特性,尽量多写一些好内容出来。

渠道方面,可能会在简书,以及各大云厂商的开发者论坛同步一些文章,

作为自身,我会不断精进自己的技术,扩展深度和广度,争取多输出一些有价值的内容,提升质量和深度,创造更多价值。

希望各位多多支持。

Python 二进制结构化数据处理和封装

当 python 需要调用 C 程序,或是进行文件、网络操作时,需要对二进制结构化字节流进行处理,此时需要使用到 struct 这个模块提供的方法。

详细方法可以查看 官方教程,这里以 perlpack 作为对比,使用 python 实现类似 perl 数据打包的效果。

在 perl 的 pack 方法中,提供了一种 Z* 的写法,可以总是保证最后有一位空填充,在 python 中则可以这样实现:

# 类比 perl 的 pack "VVVVZ*", $max, 0, 0, 0, $user;
fmt = "<4lx" + str(len(user) + 1) + "s"  # 类比 perl Z*,总是保证最后有一位空填充
bindata = struct.pack(fmt, maxn, 0, 0, 0, bytes(user, encoding="utf8"))
# 小端序,4个 long (32位整) 后面跟 填充字节 ,然后再拼 字符长度 +1 个 s(字节串)

最后打印出来的效果是这样:

b'tasklist\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00dev\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

如果直接使用 .format 或是字符拼接 + `.ljust(256, '\000') 之类的方法在后面强行补 也是可以实现类似的效果,但是打印出来还是字符对象,不是我希望的字节流对象,而且很繁琐,不专业:

'tasklist                                                                                                                                                                                                                                                        dev                                                                                                                                                                                                                                                             '

大概就是这样,像是中间塞了一堆空格。建议数据打包还是使用 struct.pack 来进行。

基本实现需求。

参考文献

2021 下半年博客「经营」报告

距离发布《2021 上半年博客「经营」报告》已经半年过去了,这半年里,我发布了 Notion BoJo模版及其配套的财务看板「BJ-PFD」,发布了随机壁纸生成器「Get Random Wallpaper」,新作了个人主页「煎茶」,自此我的博客「Frytea’s Blog」专门分享一些碎片化的信息,主页用来汇集个人信息并分享成体系的内容。

这样一来,下半年的网站访问量相较上半年有一个简单的提升,在这里简单“汇报”一下。

发现百度统计统计到来自百度的流量多,Google 统计到来自 Google 的流量多,为了解决该问题我自己使用 umami 搭建了访问统计服务,但目前才统计了3个月,这次还是先看百度统计吧。

数据概述

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-2.35.06c9acb01fa2da7373.png

从百度统计的结果来看,近半年主要网站 PV 10W 次,UV 7W 个,来自 5W 个IP,相比去年有一个小小的提升,心里还是很开心。

其中 11月访问量最高,单月访问量 3W+,大概是因为那个月在 V2EX 发布了一篇「找寻独立原创博客的价值」的帖子。截至目前这篇帖子获得了 5060 次点击 ∙ 44 人收藏 ∙ 3 人感谢。

来源统计

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.10.15045551465ce491a6.png

再来看一下来源统计。百度统计的结果显示,访客最多的是直接访问,其次是来源百度搜索,之后是必应和谷歌,在后面就是来自论坛和其他流量。

搜索词方面,比较多的是这些来自百度的搜索词:

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.18.41f7954644672e4673.png

访问统计

访问统计方面,这些页面被访问的次数最多:

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.27.374776c271b94a0473.png

访客统计

访客统计方面,先看看全球的访客分布:

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.29.02934d38cb95a44a93.png

来自中国的访问最多,其次是美国。再看看国内的访客分布:

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.30.211e42bb9be478a0fe.png

国内访客中,来自北京的最多,其次是上海和广东。

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.31.46110a9d8db0e86c4f.png

客户端类型方面,PC端还是比移动端多一些。

https://imagehost-cdn.frytea.com/images/2022/01/01/2022-01-01-3.34.04fc04190d6f127d45.png

访客属性方面,大概如图所示。

总结

互联网时代的流量就是金钱,而作为网站站长则希望自己网站的内容可以真正的为网友提供帮助,在未来我会努力输出整理有价值的内容,希望持续输出价值。

解决 perl: warning: Setting locale failed.

使用 Ubuntu 主机远程 PVE 服务器执行命令时报错:

# qm list
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_ADDRESS = "zh_CN.UTF-8",
    LC_NAME = "zh_CN.UTF-8",
    LC_MONETARY = "zh_CN.UTF-8",
    LC_PAPER = "zh_CN.UTF-8",
    LC_IDENTIFICATION = "zh_CN.UTF-8",
    LC_TELEPHONE = "zh_CN.UTF-8",
    LC_MEASUREMENT = "zh_CN.UTF-8",
    LC_TIME = "zh_CN.UTF-8",
    LC_NUMERIC = "zh_CN.UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

查看字符集配置发现有报错:

# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=

经过分析错误为 LC_ALL 没设置值,LC_CTYPELC_MESSAGES 的值 zh_CN.UTF-8 系统未安装。

远程主机默认仅支持 en_US.UTF-8 ,而我的客户端默认配置为 zh_CN.UTF-8 ,结果远程时服务端继承了客户端配置,导致字符集报错。

此时无需在远程做任何配置,只需断开远程连接,将下面一行配置写入我的 Ubuntu 主机中的 ~./bashrc 即可:

export LC_ALL=C

原理

在设定主机 locale 时存在一个优先级,可总结为 LC_ALL > LC_* >LANG ,可以说 LC_ALL最上级设定或者强制设定,而 LANG 是默认设定值。

若需了解详情可拓展阅读参考文献。

参考文献

正则表达式元字符

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

下面列出 iBM 帮助文档列出的 perl 正则表达式元字符

元字符 描述
\ 将下一个字符标记为特殊字符或字面值。例如, n 匹配字符 n ,而 \n 匹配 换行符。序列 \ 匹配 \,而 ( 匹配 ( 。
^ 匹配输入的开始部分。
$ 匹配输入的结束部分。
* 零次 或 更多次 匹配前面的字符。例如, zo* 匹配 z 或 zoo 。
+ 一次 或 更多次 匹配前面的字符。例如, zo+ 匹配 zoo ,但是 不匹配 z 。
? 零次 或 一次 匹配前面的字符。例如, a?ve? 匹配 never 中的 ve 。
. 匹配任何 单个字符,但换行符除外。
(pattern) 匹配模式并记住匹配项。通过使用以下代码,匹配的子串可以检索自生成的匹配项集合: Item [0]…[n] 。要匹配圆括号字符 ( ) ,请使用 ( 或 ) 。
x\|y 匹配 x 或 y 。 例如, z|wood 匹配 z 或 wood 。 (z|w)oo 匹配 zoo 或 wood 。
{n} n 是一个非负整数。精确匹配 n 次。例如, o{2} 不匹配 Bob 中的 o,但是匹配 foooood 中的 前两个 o 。
{n,} 在此表达式中, n 是一个非负整数。至少 n 次匹配前面的字符。例如, o{2,} 不匹配 Bob 中的 o ,但是匹配 foooood 中的所有 o 。 o{1,} 表达式等效于 o+ , o{0,} 等效于 o* 。
{n,m} m 和 n 变量是非负整数。至少 n 次且至多 m 次匹配前面的字符。例如, o{1,3} 匹配 fooooood 中的 前三个 o 。 o{0,1} 表达式等效于 o? 。
[xyz] 一个字符集。匹配任意一个包含的字符。例如, [abc] 匹配 plain 中的 a 。
[^xyz] 一个否定字符集。匹配任何未包含的字符。例如, [^abc] 匹配 plain 中的 p 。
[a-z] 字符范围。匹配指定范围中的任何字符。例如, [a-z] 匹配英语字母中的任何小写的字母字符。
[^m-z] 一个否定字符范围。匹配未在指定范围中的任何字符。例如, [m-z] 匹配未在范围 m 到 z 之间的任何字符。
\A 仅匹配字符串的开头。
\b 匹配 某个单词 边界,即,某个单词和空格之间的位置。例如, er\b 匹配 never 中的 er ,但是不匹配 verb 中的 er 。
\B 匹配 非单词 边界。 ea*r\B 表达式匹配 never early 中的 ear 。
\d 匹配数字字符。
\D 匹配非数字字符。
\f 匹配换页字符。
\n 匹配换行符。
\r 匹配回车字符。
\s 匹配任何空格,包括空白、制表符、换页字符等等。
\S 匹配任何 非空格 字符。
\t 匹配 跳进 字符。
\v 匹配 垂直跳进字符。
\w 匹配任何 单词字符,包括下划线。此表达式等效于 [A-Za-z0-9_] 。
\W 匹配任何 非单词字符。此表达式等效于 [^A-Za-z0-9__] 。
\z 仅匹配字符串的结尾。
\Z 仅匹配字符串的结尾,或者结尾的换行符之前。

参考文献

2021 上半年博客「经营」报告

2018.10.07 开始建站以来,我的个人博客已经上线运营快三年啦,一直没有做过所谓「经营报告」,这个词也是有点夸张了,只是来简单做一下流量统计分析罢了。

说来也是偶然,也是看到 这篇文章 的突发奇想,发现自己从来没有写文章好好分析过自己的网站流量,甚至于前一阵子我都为网站流量带来的资费问题发愁了,都没有想起来做一个这样的报告,就趁这个年中的机会,做一个上半年博客「简单经营」报告吧。

数据统计

不多说,直接上图吧:

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.41.591ecfe79452372b8f.png

根据百度统计,2021年1月1日至2021年6月30日,我的博客迎来了 46892 位独立访客,带来了 61699 次浏览量,老实说这个数量不算多,平均下来每天有 300 次左右的浏览量,还算比较稳定吧 ?,不枉我这么“积极”地更新文章。

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.50.2063cd0f3ee43848ee.png

这其中,有近70%的访问来自搜索引擎,15%来自直接访问,其余均是直接访问。在来自搜索引擎的访问中,有78%来自百度,16%来自谷歌,有点出乎我的预料。要知道,百度对我网站的收录总是较慢的。

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.52.21d9849bd20c7f61ec.png

究竟是什么搜索词带领用户来到我的网站呢?具榜首的居然是一个 git 相关的问题,之后就是 lstc 相关的问题了,看来这样的问题是许多用户的刚需呀。

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.54.40ca0a9d1017aa581d.png

在这半年中,我的网站中受访最多的内容居然是介绍 LEDE 的一篇文章,这是令我意想不到的。

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.55.501deb65ea4937ba2e.png

从访客来源来看,近半年中访问我网站最多的区域在广东,紧随其后是北京和江苏,也算是互联网较为发达的地方了,看样我的网站还是比较受这些相对互联网较为发达地区用户的青睐。

https://imagehost-cdn.frytea.com/images/2021/07/09/2021-07-09-11.57.49270b7fd179002d97.png

从系统环境来看,浏览我网站的用户大都是计算机桌面用户,手机端用户较少,看样子访问我的网站更多的是使用计算机的场景。

https://imagehost-cdn.frytea.com/images/2021/07/10/2021-07-10-12.00.44f0c87ee0e357555e.png

从访客属性来看,我的网站更受男性的青睐,年龄段多在25-34岁,学历主要在本科以上,主要从事IT互联网方面。

总结

总的来看,我的网站已稳定运营近三年,用户量还算比较稳定,没有较大的提升,每日流量近1GB,用户量300左右,不多不少,我很感激进入我网站的用户,也真心的为我网站的内容带来价值感到高兴。未来我会更努力的输出有价值的内容,就在近期我对我的博客做了调整,重新整理了目录,增加了个人作品集,增加了联络方式,希望我输出的内容对你有价值,若有什么建业也请提出,感激不尽!