为什么不能直接取消强制车辆年检

最近出来的政策看上去是大利好,实际上让步的空间有限,8座9座的车辆很少,看上去是让了,但实际上更多只是在向C本的车型定义一致靠拢,一定程度上减小了乱七八糟的车辆和驾照的分型标准的混乱程度。

至于车辆年检六年以上放宽到两年一检,也是给检车厂留一点生意,现在都是要求先上强制保险,再去验车,按说保险公司给车辆上保险应该是先验车才能上,这两个分开本身就很奇怪,无论哪个先后。

车辆是否具备安全驾驶条件应该由承保的保险公司负责,交警通过现场或者非现场检查就行了,至于检车的费用自然由保险公司解决,保险公司之间有竞争,不至于像现在检车厂一样,强制一样的收费,无论车况好还是车况不好。

过冬

去年的冬天是个让人伤心的冬天,爷爷走了,sars来了,2020年开头的几个月过的心焦,那些受了苦的人虽然我不认识几个,但他们是存在的,但是现在谁知道呢。

当然,接下来这个冬天未必像之前那么折腾,毕竟这个病毒的危害已经没有那么大,小病自己找朋友看,就怕大病的时候医院停诊,幸好短期内自己遇上这种情况的可能性比较小。

最近迷房车,这归根结底是关乎自由的一个命题,在基本解决了居住自由的情况下,需要解决出行自由,家里人多,北京又限号,所以怎么选择一个更好地组合方案就成了难题。一个电车加一个油车,电车上班,油车出游。

而且把心思放在房车这样一个更加具体的话题上,可以在一段时间内缓解一下关于宏观命题的焦虑感,尽管我知道它仍然会回来的。

以docker的方式运行composer时报sh: git: not found

操作系统:ubuntu20

环境:https://github.com/yeszao/dnmp

在宿主机本地安装的jenkins,在jenkins中设置job,composer install,截取部分输出如下:

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 8 installs, 0 updates, 0 removals
  - Installing sebastian/code-unit-reverse-lookup (2.0.2): Downloading (connecting...)Downloading (100%)             Failed to download sebastian/code-unit-reverse-lookup from dist: /tmp/composer/cache/files/sebastian/code-unit-reverse-lookup does not exist and could not be created.
    Now trying to download from source
  - Installing sebastian/code-unit-reverse-lookup (2.0.2): Cloning ee51f9bb0c

                                                                                                                                                          
  [RuntimeException]                                                                                                                                      
  Failed to clone https://github.com/sebastianbergmann/code-unit-reverse-lookup.git, git was not found, check that it is installed and in your PATH env.  
                                                                                                                                                          
  sh: git: not found                                                                                                                                      
                                                                                                                                                          

install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-custom-installers] [--no-autoloader] [--no-scripts] [--no-progress] [--no-suggest] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--ignore-platform-reqs] [--] [<packages>]...

skipping non-regular file "vendor/bin/carbon"
skipping non-regular file "vendor/bin/commonmark"
skipping non-regular file "vendor/bin/php-parse"
skipping non-regular file "vendor/bin/psysh"
skipping non-regular file "vendor/bin/var-dump-server"
Finished: SUCCESS

直接在宿主机进到相应的项目目录执行composer install显示:

Cannot create cache directory /tmp/composer/cache/repo/https---repo.packagist.org/, or directory is not writable. Proceeding without cache
Cannot create cache directory /tmp/composer/cache/files/, or directory is not writable. Proceeding without cache

                                                                            
  [Composer\Downloader\TransportException]                                  
  Content-Length mismatch, received 44625 bytes out of the expected 604017  
                                                                            

require [--dev] [--prefer-source] [--prefer-dist] [--fixed] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]...

这里的composer命令是通过在.bashrc中添加以下命令实现的:

# php7 composer
composer () {
    tty=
    tty -s && tty=--tty
    docker run \
        $tty \
        --interactive \
        --rm \
        --user www-data:www-data \
        --volume ~/dnmp/data/composer:/tmp/composer \
        --volume $(pwd):/app \
        --workdir /app \
        dnmp_php composer "$@"
}

提示找不到git,但显然是存在的,搜索发现可能是权限问题,就给~/dnmp/data/composer,还有/var/lib/jenkins/workspace目录改成777,问题解决。

班级文明小天使

前面那一篇有关小学生守则对比的文章其实是受上小学一年级的女儿第一次评选为班级文明小天使的触动而作,班主任老师发来消息,让自己写50字的“事迹”,还提示可以写与同学相处融洽,纪律好,学习认真等。

我第一感觉是被套路了。这些在校的表现应该老师来写啊,我们家长怎么知道。第二感觉是这种评选本身是否应该存在。当然,不写是不行的,所以就从细节入手吧,看看写的角度怎么着能有点尊严。所以才有了一个小小的调研,遗憾的是时间有限,并有找到这些材料的真正来源,网上流传很广,但不知道国外的出自哪个机构,总之,我不相信他们的版本是出自政府的教育部门。

最终,我们写就的版本是:

准时上学、认真听课、作业全优;分加餐、收作业,积极主动不懒惰;尊师长、爱同学,校内校外朋友多。

基本原则是尽量不写太空洞的话,反映具体事实,有一定的递进层次,而且能反映孩子的主要性格特点。

对于总结出来的一些原则,以后慢慢在讲睡前故事的时候渗透吧。

英日美法中各国小学生守则的对比分析

资料来源:https://www.sohu.com/a/416864708_100031913

资料原文就不照搬了,请点开链接查看。

先看分析结果,上面的图片可以看出各国的侧重点。具体内容就不展开了。

下图是打分的明细,按六个方向打分,总体上每个打分点按10分计,偏弱一点的打5分,交叉的可以同时打分,这样未必规范,也未考虑各国的总分均衡。只是单纯对比下字面的偏重。

岔道

这个岔道村是八达岭长城附近的一个岔道古城形成的村落,现在差不多都改成了民宿的样子,房子是翻盖的仿古样式,倒是整齐,除了吃饭睡觉,就啥都没有了。

会玩的,一进院子,就支上音响唱起歌,也不管好听不好听,总归是唱了。然后就是烧烤,出游必备的项目,于是烟雾缭绕,孜然香味儿四溢。

我们周六到的早,开车一路就进了古城,正赶上娶亲的车队驶出,新娘子长得一般,问了后面一个面包车的司机,新娘子不是岔道城的,是附近延庆那边的,大概是进来兜一圈,不知道是什么风俗还是为了沾点古气。

城里的格局很像我们家边的宛平城,东西两个城门,中间一条东西向的大车道,只是这里故意弄成了坑洼不平的石头路,我们的小骐达要慢慢开,否则车轴要完蛋了。大道两边是整整齐齐的民宿,有家弄了比较现代的咖啡馆的样子,有的是很淳朴的红字招牌饭店,有的还在装修,有的还没装修。怪不得前两年摘了5A级的牌子。

然后遇到了景区管理的电瓶车,我们被赶出来。

我们一行九个大人,九个孩子,准备了很多吃食,两天下来也算过了一个还不错的周末,只是,总觉得跟想象的不一样,又跟经验里所知道的一样,没文化而已,有什么大不了。

房东有两个女儿,有一个癌症,女婿在打理网上预订,老两口收拾房子,民宿的名字是外孙的名字。

[Jenkins]Error:403 No valid crumb was included in the request

最近在更新job的配置时经常出现以上的报错,开始还误以为是百度效率云的icode出了问题。跟百度效率云的团队反馈,对方一直没有响应,不知道是解散了(开个玩笑),还是觉得这不是个问题。

检索这个问题,发现很多文章都说取消全局安全配置中的CSRF Protection的勾选即可,但是我的jenkins里没有这个勾选框了。

然后又检索到https://www.cnblogs.com/kazihuo/p/12937071.html

Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能。 从较旧版本的Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁用。

这篇文章给的办法是在启动jenkins时添加一个配置

-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

来实现这个关闭。

但是这样很不优雅,尤其是我有两个jenkins,一个基本上是最新版,一个是为了兼容百度效率云的插件而保留的一个很老的版本。最新版是直接在服务器上跑的jar版本,老版本是用的docker。以上的方法就不好玩了。

所以受到https://stackoverflow.com/questions/49888756/how-do-you-disable-jenkins-csrf-with-script的启发,我安装了一个Strict Crumb Issuer插件,然后在跨站请求伪造保护这里,选择这个插件来工作,配置默认。保存就好了。