#853 dd 替代品

2022-12-25
dd if=image.iso of=/dev/sdb bs=4M

# 用 cat 就行:
cat image.iso >/dev/sdb
# 如果想要进度信息:
cat image.iso | pv >/dev/sdb

dd if=/dev/zero of=image.iso bs=4MB count=25
# 用 head:
head -c 100MB /dev/zero >image.iso

参考:https://eklitzke.org/the-cult-of-dd

#852 Python 2.7 Json 字符串类型的问题

2022-12-19

今日发现一个 Python 2.7 的一个大坑:部分版本下 JSON 解析字符串为 str 类型,部分版本解析成 unicode 类型。

Python 2.7 (r27:82500, Apr 12 2016, 21:09:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; print(repr(json.loads('"a"')));
'a'

Python 2.7.15 (default, Jul 22 2019, 17:38:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
's'

Python 2.7.15 (default, Jun 26 2018, 11:17:18)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
u's'

Python 2.7.18 (default, Mar 23 2022, 15:07:54)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import json; json.loads('"s"'); exit();
u's'

找到一个相关的 Issue:json.loads() on str should return unicode, not str
对应 GitHub 上的 Issue#54247

根据相关内容,这个问题影响了 Python 2.7 的一些版本。


还有:json.loads() returns str instead of unicode for empty strings
对应 GitHub 上的 Issue#56191

#851 bash 上下键搜索历史记录

2022-12-16

我一直用 zsh + omz,但是毕竟 bash 才是大多数情况下的默认 Shell。

zsh 和 bash 都是用上下键来搜索历史记录,但是不同的是,zsh 会利用已经输入部分做前缀匹配,而 bash 不会,只是简单的上一条、下一条。

今天学会一个方法(Bash history search, partial + up-arrow):

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

凑活凑活吧。

已经加到我个人的 bash 配置中。

#850 Golang 变量初始化顺序问题

2022-12-15

f1.go

package main

var A int = 3
var B int = A + 1
var C int = A

f2.go

package main

import "fmt"

var D = f()

func f() int {
    A = 1
    return 1
}

func main() {
    fmt.Println(A, B, C)
}

执行

markjour@victus ~/test02
$ go version
go version go1.18.6 windows/amd64

markjour@victus ~/test02
$ go run f1.go f2.go
1 4 3

markjour@victus ~/test02
$ go run f2.go f1.go
1 2 3

分析

f1f2 的情况下:变量初始化的顺序应该为 A B C D,所以输出 1 4 3 是没有问题的。
f2f1 的情况下:变量初始化的顺序应该为 A D B C,所以按理应该输出 1 2 1,实际确实输出 1 2 3。

f1 中 A C 中只要一个的初始化改成这样就可以符合预期:

func initA() int {
    return 3
}

func initC() int {
    return A
}

这是 Go 的一个 BUG,即将在 Go 1.20 修复。
知道就行了。

参考资料与拓展阅读

#849 疫情的影响

2022-12-13

封控

由于疫情的封控措施导致官民矛盾非常激烈,到处都是对抗。
我自己小区就有暴力冲突,社区工作人员和物业保安群殴 “闯岗” 租户。我所知道的周边小区也是差不多。其他的某些地方甚至是聚集性的大事件(抖音删帖非常严重)。
这些 “小浪花” 单独拿出来,可能觉得是和物业在斗争、和大白在斗争、和社区工作人员在斗争,实际上背后是对镇府不作为,不敢担当的不满。

市镇府肯定知道下面的情况,可是没有做任何干涉。在一定程度上我能理解,一方面上面有这 m 条、那 n 条,要求 “精准防控”,尽可能开放,一方面又对防疫不力的地方杀鸡儆猴(就没见到几个因为过度防控而收到严厉处分的)。

但是:

第一,居委会作为居民自治组织,没有执法权,将居委会推到一线,给大家封路、封门、钉板子,凭什么。

第二,没有人能够出具有法律效力的(带公章)文件要求封控,经常就是群里发个消息,可能再带一张居委会的 A4 扫描件,也没有公章。问就是上级单位。

第三,小区封控起来之后,物质的供应方面,镇府没有任何作为。
本来我们都在小区铁门内买,门外门店老板递过来,结果工商(?)的一天查几次,要求他们关门,所以经常要到处找哪里有卖菜的地方。
我在买菜的时候,还听到一起买菜的人在说,工商要我们在家吃几天面条挺过去。
本来大部分人都不用和镇府打交道,因为疫情防控的关系,大家直接面对面了。

还有,大家在传核酸企业的一些传闻,这个我不了解情况,就不评论了,但是证监会给他们上市割韭菜的机会是为什么?

注:如果要出小区,需要社区出具的一个小纸条,注明原因,承诺两点一线,物业的检查方面也非常松,基本上是看到拿出来一个纸条就放行,并且没有时间限制。

解封

上面是之前的情况,最近这两天风向来了个 180° 的大转弯。之前是应检尽检,一天几次的在小区群里催大家下楼做核酸。突然一声不吭,

  1. 做不做核酸都是绿码了,同样没有见到官方的任何说法。
  2. 一天之内开始拆除所有路障。
  3. 减少撤销小区周边的便民检测点,残存的几个检测点还在大喇叭喊话,如果没有必要尽量不要做核酸(混管),不要连累家人邻居被封。
  4. 又两三天之后,所有地方都开始强调不检查核酸绿码了。

感染

再就是身边慢慢星星点点听说有人发烧、有人自测阳性。
药店基本上感冒发烧消毒的东西,啥都没有,只能靠自己挺了。镇府在这方面(医药供应)还是啥都没作为。服了。

之前新闻联播里面天天说美国新冠的情况,现在也不提了。
之前说新冠好像非常严重,现在说是和感冒差不多,可以自己挺过去。
之前强调防控是保障人民的生命权,现在说放开是精准调研之后选择的最好时机。

现在这种从上到下都紧跟 ZZ 形势说话的氛围,做没有脑子的咽喉,让人挺没有信任感的。
虽然表面上看不太出来,但是从长远来讲,这都是信心的流失。

最重要的还是期间各级镇府的不作为。在不违反规定的情况下,其实有好多事情可以做,那样的话,也不会是现在这个局面。

#848 街道,社区,居委会?

2022-12-01
  • 街道,街道办事处,相当于乡政府,镇政府

  • 工作人员是事业编制,少部分是公务员

法律依据:

  • 《地方各级人民代表大会和地方各级人民政府组织法》第六十八条规定:
    > 市辖区、不设区的市人民政府,经上一级人民政府批准,可以设立若干个街道,管理机构为街道办事处,作为市辖区、不设区的市的派出机关。

  • 居委会,居民委员会,相当于村委会(村民委员会)

  • 又叫社区居民委员会,简称社区。(?)

  • 在街道和更高级别政府的指导下工作。
  • 理论上,居委会应该是居民自治组织,其领导班子应该由辖区居民选举产生。

法律依据:

  • 《中华人民共和国城市居民委员会组织法》

  • 业委会,业主委员会,小区自行选举代表业主利益的组织。管理小区公共利益,监督物业公司的工作。

  • 选举需要经过街道和社区批准。

法律依据:

  • 《中华人民共和国民法典》
  • 《业主大会和业主委员会指导规则》(建房[2009]274号)

参考资料与拓展阅读

  1. 网易,未经批准擅自组织业委会选举,临沂2人被刑拘!

...,在未经街道办事处和社区组织批准的情况下,...

  1. 北京市人民政府,社区和居委会的区别是什么?
    IMG

#847 Beyond Compare 试用到期的问题

2022-11-30

LOGO

BComp 之前过期也可以一直用,只是提示一下,现在不行了。
这是我在 Windows 平台上非常习惯了的一个工具。

作为一个做软件开发的人,搞这种歪门邪道,我还是会有罪恶感的,所以点进去看了一下官方售价,70 刀,瞬间没有罪恶感了。


网上找了几个注册密钥,都提示 “授权密钥已被吊销”,然后看到这个方法,亲测有效:

在注册表中删除这个条目:HKEY_CURRENT_USER\Software\Scooter Software\Beyond Compare 4\CacheId 就行。


如果不知道我上面说的时什么意思,就把下面这段代码保存为 bcompAddTime.bat,双击执行。
如果提示 “没有适当的权限访问该项目”,就右键,管理员身份运行。

@echo off

echo
echo 开始删除 =====================================================================
echo
reg delete "HKCU\Software\Scooter Software\Beyond Compare 4" /v CacheID /f
echo
echo 删除完成 =====================================================================
echo

reg query  "HKCU\Software\Scooter Software\Beyond Compare 4"

pause

#846 短信类型

2022-11-28
  • 短信,Short Message/Messaging Service,SMS

    • 1986 年 GSM 协议的一部分,最大允许 140 字节。
  • 彩信,多媒体短信,Multimedia Messaging Service,MMS

    • 支持文字,图片,音频
    • 支持 300KB 内容(由运营商和手机终端双方面决定的)

    Although the standard does not specify a maximum size for a message, 300 kB and 600 kB are the recommended sizes used by networks for compatibility with MMS 1.2 and MMS 1.3 devices respectively.
    The limit for the first generation of MMS was 50 kB.

    MMS 依赖 WAP。
    发送彩信的时候,内容编码之后投递给多媒体消息服务中心(MMSC)(如果跨运营商,会中转到收信人运营商 MMSC)。
    收信人运营商会确认设备是否支持 MMS,如果支持,就发送一个 WAPPush 通知,内容就是一个 URL,也就是才新内容的地址。
    一般来说,默认都是需要收信人手动确认是否接收,如果同意接收就会连上 URL 下载内容在手机端浏览。(网页?)

  • 闪信,Flash SMS

    • 似乎有地方称之为屏信,展信
    • 经常是政府机关或者运营商用来发送通知、提醒(如果用作营销就太恶心了)
    • 可能存在的问题:部分机器不支持闪信,闪信相互覆盖
    • 和 SMS 不同,据说是跟 USSD 有关
    • 又有资料说是只有短信头不同,存疑,如果是的话,为什么没有看到伪基站大量投递闪信
    • 根据网上的资料,CMPP 协议支持发闪信
  • 影信,视频短信

    • 彩信升级版,支持:文字,图片,视频,音频

      • 支持视频
      • 支持最大 1.8M 的富媒体内容 (有的说 1.85M,有的说 1.9M,有的说 2M)
      • 不算收信方流量费用(发信方付费)
      • 不对个人开放,需要企业资质审核
    • 阿里云叫做数字短信,和卡片短信(就是下面的 AIM 短信)一起被归类到多媒体短信中。

      短信内容不支持纯文字或纯视频或纯图片或纯音频,模板须大于 660 KB。
      图片+音频+视频+文本须小于 1900 KB,超过后不支持。

    • 燃信,中国移动的营销概念,就是视频短信,加上了一点卖用户数据的成分在里面(实名认证,用户画像)。

  • 富信,富媒体短信,Rich Communication Services,RCS

    • 同样也是 GSMA 推出的协议(GSMA RCS UP 标准),2019 年成为 5G 标准的一部分。
    • 文字,图片,音频,视频,地理位置,文件等,几乎微信可以发送的消息,这里都支持。
    • 根据维基百科,RCS 可能也被称之为 Advanced Messaging,Chat,joyn,SMSoIP,Message+,SMS+。
    • 【澎湃新闻】当地时间 12 月 2 日,谷歌发文庆祝短信问世 30 周年,称现在应转用富媒体通信(RCS),并顺便挖苦不支持 RCS 的苹果“消息功能还活在 30 年前”。
      PS:苹果不支持 RCS。
  • 5G 消息,5G 短信,RCS 的国内名称,其实和 5G 技术没有一毛钱关系,只是和运营商的 5G 业务绑定在一起

    • 几大运营商都在推,试图将短信服务打造成微信(这么牛 B 的愿景,为什么我一点都没有感受到)
    • 不走短信网关,走互联网。如果网络有问题,有回退方案,就是下面的 AIM 这种。
    • 2020 年 4 月 8 日,中国移动、中国电信、中国联通携手 11 家合作伙伴共同发布《5G 消息白皮书》,三大运营商计划在 2020 年内推出 5G 消息。
    • 2020 年 5 月 10 日,5G 消息 APP 上架。5 月 11 日,5G 消息 APP 因技术原因暂时下架。
    • 2020 年 12 月 22 日,短信业务升级为 5G 消息,无需下载客户端,就可实现“消息即服务”。
    • 2022 年 1 月 25 日,中国电信 5G 消息正式商用。
    • 目前存在的问题:收费(他们的脑子是咋想的?);运营商和手机厂家各怀鬼胎;短信服务早已沦为接受验证码的工具,互联网即时通讯服务的城墙已经非常高了。
  • AIM 短信,智能短信,智慧短信,手机上的短信应用将普通文本短信渲染成更丰富的样式,还有交互的功能,可以打开轻应用,应用,H5 页面,拨号,打开地图等。

    • 需要手机厂商支持
    • 根据网上的资料,可能是深圳梦网推出的。
    • 华为云智能短信 是一回事么?说是覆盖安卓生态。
    • 又看到一种新称呼:5G 阅信

参考资料与拓展阅读

#845 谈谈远程办公的思考

2022-11-26

这三年,由于疫情,已经有好些次远程办公了(有时是在老家,甚至有次在旅游景点),相信很多人都是这样。

我没有体验过那种真正远程办公的工作氛围,只是迫不得已的把远程当做备选方案而已。所以现在只能基于我的这些经历说一下自己的思考。

  1. 通勤时间可以省了
  2. 在家吃更健康,起码更放心
  3. 要是就一个人吃,买菜、洗菜、做饭、吃饭、洗碗,这个时间成本,我觉得是不划算的
  4. 不要久坐,多站起来动动,看看窗外风景也是好的(我在公司也是时不时走一下)
  5. 最好要有一个属于自己的空间,没人打扰
  6. 总是被打扰,工作的体验也不好,任务没完成的压力会让人更累
  7. 和同事之间的沟通应该找一个更好的途径(目前没有)
  8. 在线通讯只能等回复,要是在公司,三分钟没有回复,我就可以找过去了
  9. 开发过程中无法保证一直盯着微信,我是做不到的,我也不喜欢总被打断
  10. 合理的值班制度安排很重要,值班者完全不安排其他需要投入较多时间精力的工作,保证在线回复和处理问题的速度

#844 静态网站生成器

2022-11-17

https://github.com/topics/static-site-generator

GitHub 搜索了一下,知名的静态网站生成器,大部分是 JS/TS 写的。

社区上经常见到的一些项目有 JS 的 Hexo,Ruby 的 Jekyll,Go 的 Hugo

JavaScript

  1. gatsbyjs/gatsby shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    The fastest frontend for the headless web. Build modern websites with React.
  2. hexojs/hexo shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    A fast, simple & powerful blog framework, powered by Node.js.
  3. vuejs/vuepress shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    📝 Minimalistic Vue-powered static site generator
  4. netlify/netlify-cms shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    A Git-based CMS for Static Site Generators
  5. 11ty/eleventy shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    A simpler static site generator. An alternative to Jekyll. Transforms a directory of templates (of varying types) into HTML.
  6. react-static/react-static shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    ⚛️ 🚀 A progressive static site generator for React.
  7. gridsome/gridsome shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    ⚡️ The Jamstack framework for Vue.js
  8. metalsmith/metalsmith shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    An extremely simple, pluggable static site generator.
  9. getgridea/gridea shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    ✍️ A static blog writing client (一个静态博客写作客户端)
  10. GetPublii/Publii shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    Publii is a desktop-based CMS for Windows, Mac and Linux that makes creating static websites fast and hassle-free, even for beginners.

Python

  1. mkdocs/mkdocs shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    Project documentation with Markdown.
  2. getpelican/pelican shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    Static site generator that supports Markdown and reST syntax. Powered by Python.

Ruby

  1. jekyll/jekyll shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    :globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby

Rust

  1. getzola/zola shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    A fast static site generator in a single binary with everything built-in. https://www.getzola.org

Go

  1. gohugoio/hugo shields.io:github/stars shields.io:github/languages/code-size shields.io:github/commit-activity/w shields.io:github/license
    The world’s fastest framework for building websites.