liujia 发布的文章

去坚强百货超市买鲈鱼

约十工前,我在果园好友超市买了条鲈鱼,一斤22元吊钱。“主任”话坚强百货的会便宜下,17吊左右。差5吊钱?今天上午约十点,我从御水出发,要到坚强百货买鲈鱼,爱撑几吊钱来。

走了约半只钟头,进门上二楼。行超市嘅人不多,睇到入口附近嘅西红柿,特价“十吊钱三斤”,我忍住不曾买。行到姜蒜区,网袋装稳嘅老姜,爱12吊钱,我也不买。我走到靠墙摆两排玻璃水缸的水鱼区,在写着18.9元/斤的鲈鱼缸前,企稳,左望右望,冇人搭。我走近在旁边往玻璃缸撒盐的、着稳红色工作服的人。
“尔好。我买鱼。”我讲。
“你自己拿网挑鱼就行。”吖姨看了我一小会,用普通话回答。
我转身回到鲈鱼缸前,抄起上排的一个鱼兜,往水缸里一探,有条鱼即刻钻进兜里,我提起来。走到红衣的吖姨前,她指着附近另一个吖姨,说到那儿打称。我提着网兜走到打称的吖姨前,平举着网兜,说“打下称”。吖姨拿了个胶袋伸手进网蒙鱼。鱼在网兜里蹦,忽上忽下地,不配合。“尔放落来,放到地下来。”吖姨话。于是我将网兜一端着地,吖姨顺利将鱼装进胶袋,还话,“系鱼麻。”怎么?鱼麻较不好食咪?买鱼公较抵咪?我心里打了几个问号。“包摞咪?”我问吖姨。吖姨指着一个地方话,“系。到那里。”我将胶袋递上“杀鱼台”,一只大哥冇两下帮我整好,递出窗口。“帮我斩成两段。”我不曾接,话。

我走到收银台,“有没会员卡?”姑娘用普通话问。“没。”我划着手机,准备扫码付款。姑娘从柜子下扯出一个胶袋,加在那个装着鱼,有鱼血、湿的胶袋上。我低稳头,睇手机,不曾睇路。走出四、五步时,当我抬头不知要往哪里出时,正好睇到前面有只人嘅腰背,我就跟着前边那只腰背走。走了几步,我再一抬头,惊讶地发现,我又见到卖水果嘅摊档了。我慌张了,回转头问一个着红衫嘅吖姨,“我岩岩买了条鱼,不知头,又走进超市了,吖咪爱从收银台那里出咪?”吖姨看了我下,没听明白,我赶紧用普通话又将意思说了一遍。吖姨用手指托着装鱼的胶袋看了一下,问我有没小票。我说我没拿小票。她说那你就收银台那儿出去吧。我又来到收银台,走到之前那个姑娘的岗线上,前边有两个人排队结账。姑娘看到我时,有点奇怪。我赶忙解释说,不小心又走了进来,刚才买鱼付了款的。我还特意将装着鱼的胶袋举高了让她看。姑娘边为前面的个顾客装东西,边说,“好的。我说你怎么又来了呢。”我好尴尬,经常在生疏的环境里趟路或不知所措。

用 curl 检测端口是否可连接 - http 返回码 - 证书有效期 - Shell

#!/bin/bash

# refer: https://www.baeldung.com/linux/check-website-availablilty and https://curl.se/mail/archive-2022-04/0027.html

trap "exit 1" TERM
export TOP_PID=$$
STDOUTFILE=".tempCurlStdOut" # temp file to store stdout
> $STDOUTFILE # cleans the file content

# Argument parsing follows our specification
for i in "$@"; do
  case $i in
#    http*)
#      WEBPAGE="${i#*=}"
#      shift
#      ;;
    -n=*|--notWantedContent=*)
      NOTWANTEDCONTENT="${i#*=}"
      shift
      ;;
    -r=*|--requiredContent=*)
      REQUIREDCONTENT="${i#*=}"
      shift
      ;;
    -e=*|--email=*)
      EMAIL="${i#*=}"
      shift
      ;;
    -s|--silent)
      SILENT=true
      shift
      ;;
    -t|--testTcpPortOnly)
      TESTTCPPORTONLY=true
      shift
      ;;      
#    *)
#      >&2 echo "Unknown option: $i" # stderr
#      exit 1
#      ;;
    *)
      WEBPAGE="${i#*=}"
      shift      
      ;;
    *)
      ;;
  esac
done

if test -z "$WEBPAGE"; then
    >&2 echo "Missing required URL" # stderr
    exit 1;
fi

function tcp_port_is_open {
  local exit_status_code
#   curl -t '' --connect-timeout 2 -s telnet://"$1:$2" </dev/null
   URL=${WEBPAGE#*//*}
   curl -t '' --connect-timeout 2 -s telnet://"$URL" </dev/null
   exit_status_code=$?
   case $exit_status_code in
     49) return 0 ;;
     *) return "$exit_status_code" ;;
   esac
}

function stdOutput { 
    if ! test "$SILENT" = true; then
        echo "$1"
    fi
}

function stdError { 
    if ! test "$SILENT" = true; then
        >&2 echo "$1" # stderr
    fi
    if ! test -z "$EMAIL"; then
        echo -e "Subject: $WEBPAGE is not working\n\nThe error is: $1" | msmtp $EMAIL
    fi
    kill -s TERM $TOP_PID # abort the script execution
}

if tcp_port_is_open > /dev/null 2>&1 ; then
    if test "$TESTTCPPORTONLY" = true; then
        stdOutput "TCP port is open -> OK"
    else
#            stdOutput "Internet connectivity OK"
    HTTPCODE=$(curl --max-time 5 --silent --write-out %{response_code} --output "$STDOUTFILE" "$WEBPAGE")
    CONTENT=$(<$STDOUTFILE) # if there are no errors, this is the HTML code of the web page
        if test $HTTPCODE -eq 200; then
            stdOutput "HTTP STATUS CODE $HTTPCODE -> OK"
        else
            stdError "HTTP STATUS CODE $HTTPCODE -> Has something gone wrong?"
        fi
        if ! test -z "$NOTWANTEDCONTENT"; then
            if echo "$CONTENT" | grep -iq "$NOTWANTEDCONTENT"; then # case insensitive check
                stdError "Not wanted content '$NOTWANTEDCONTENT'"
            fi
        fi
        if ! test -z "$REQUIREDCONTENT"; then
            if ! echo "$CONTENT" | grep -iq "$REQUIREDCONTENT"; then # case insensitive check
                stdError "Required content '$REQUIREDCONTENT' is absent"
            fi
        fi
        if echo "$WEBPAGE" | grep -iq "https"; then # case insensitive check
            EXPIREDATE=$(curl --max-time 5 --verbose --head --stderr - "$WEBPAGE" | grep "expire date" | cut -d":" -f 2- | date -f - "+%s")
            DAYS=$(( ($EXPIREDATE - $(date "+%s")) / (60*60*24) )) # days remaining to expiration
            if test $DAYS -gt 7; then
                stdOutput "No need to renew the SSL certificate. It will expire in $DAYS days."
            else
                if test $DAYS -gt 0; then
                    stdError "The SSL certificate should be renewed as soon as possible ($DAYS remaining days)."
                else
                    stdError "The SSL certificate IS ALREADY EXPIRED!"
                fi
            fi
        fi
    fi    
else
    stdError "TCP port is close -> Has something gone wrong?"
    exit 1
fi

例子:

liujia@moni:~/check$ ./c.sh anqun.org:3389 -t
TCP port is close -> Has something gone wrong?
liujia@moni:~/check$ ./c.sh anqun.org:3390 -t
TCP port is open -> OK
liujia@moni:~/check$ ./c.sh http://anqun.org:80
HTTP STATUS CODE 200 -> OK
liujia@moni:~/check$ ./c.sh https://anqun.org:443
TCP port is close -> Has something gone wrong?
liujia@moni:~/check$ ./c.sh https://liujia.anqun.org:443
HTTP STATUS CODE 200 -> OK
No need to renew the SSL certificate. It will expire in 59 days.
liujia@moni:~/check$ ./c.sh https://hy.anqun.org:443 -e=i@liujia.anqun.org
TCP port is close -> Has something gone wrong?

到邮政银行网点办理提高手机转账限额业务

我看到网友说“拼多多”app上买东西,有时可以叠加优惠券,能比淘宝、京东便宜一些。我试着用旧手机上的“拼多多”app下单买了个小的家用交换机,是能便宜约20块钱。在使用“拼多多”app时,屏幕上老弹全屏的动画,还有大字的标题,如“你真幸运”、“这次你一定能提现”之类,很吸引眼球的字。我情不自禁地跟着它的节奏,不断地点开很多个“红包”。不自觉中,十几分钟过去后,我自以为中了很多的钱,兴冲冲地在微信上查看,确实是有几笔入款,但都是0.01元,我哭笑不得。

我想了想,如果“拼多多”上有“羊毛”可以薅,那么现在各银行app上是不是也有积分或微信立减金的活动可以参加呢?我在手机上安装了邮政储蓄银行的app,照着提示添加银行卡之类的。我试了试邮政银行手机app上的转账功能,得知它限额了,显示我的转账金额是每天1万元。对于我来说,1万元的额度,是够用的,因为平时我卡上钱也就几百块。但当我看到网友他们一般单日的转账限额是50万,马上感觉到好像矮他们一等,我不服气啊。我想要去银行网点,申请提高转账的额度。

昨天下午,我先去中山路的邮政银行网点,因为近。我在厅中的前台站了站,一个戴口罩、戴眼镜的工作人员来问。我说了原因,她问我的卡是不是二类卡,我说是一类的。她让我到旁边的ATM机,插卡“证明”一下我的卡是一类卡。我不肯,因为我这卡是十几年前办的,那时还没分一类卡、二类卡的吧。我拿出手机,打开邮政银行app,把显示限额的界面给她看。她看了后,没告诉我怎么解决。恰好这时,有另一个工作人员路过,她截住了,将我交给了她。新来的工作人员让我等一下,她进去侧间,拿出一只笔样的东西,喊我将手机放到旁边的台面上。我又不肯,我就半举着手机,让她倒拿着一根笔,在我的手机屏幕上点戳操作。之后,她确认app上的限额是无法自行更改的。她说要我去和平印象的网点办理。我心里觉得纳闷,这个网点不是也有柜台窗口吗?为什么这里不可以办理提额的业务?我问她能不能取号排队,她说不能,原因是现在是下午四点四十分钟,五点就要下班交接,不开新号了。我听了,像气球泄了气般,收起手机就离开了。

今天吃过早餐,我去位于新城区“和平印象”的邮政银行网点。我不记得“和平印象”的楼盘在哪,以为邮政银行和工行、建行、农行一样在和平大道旁,不难找的。我是从工行旁的路往里走,绕到“百盛”楼盘后边又转出来。刚走出,我抬台看到有“邮政银行”的字样,拉开玻璃门,我进去。我看到就一个前台,坐着个保安,旁边是一个楼梯,没其他人。我心虚地问,
“顶里吖咪邮政银行营业厅?”
“尔办惹业务?”
“手机银行提额。”
“旁边。”保安用手指了指门外。

我懞懞然走出来,几乎不用挪开步,转个身,果真,抬头又看见着一个“邮政银行”的招牌。这个宽些的门店,像个银行网点了。我走入。
“办惹业务?”右边一个戴个口罩的工作人员热情地问。
“手机app上限制了一万,我想提高下。”
“窗口排下队。”这时,左边的保安递过来一个塑料封着的口罩。
“一定爱戴口罩咪?”我问。
“系。”
“我有。”我没接保安的口罩,我从我的包里取出口罩,然后走出玻璃门,将口罩戴上后,再进。

取到号后,显示前边有9个人排着。我闲着,就在网点里转着圈走,看看摆的设备和墙上贴的公示信息。大概是,左边靠墙的是自助设备,设备很新,但几乎没客户使用,后边来了一个“广电”的人打开前档板修机子。右边是两个柜台窗口,窗口前边摆着几张凳子,给排队的人坐的。厅中间是一个门,里边写着理财之类的。取号机上边的网点人员资质公示栏中,有五个人。五个人中,四个是“经理”的头衔,一个是柜员;四个经理中,有三个是英语专员,一个是方言专员;我看了好几眼赵经理的头像,因为十几年前,她在东山路的网点时,帮我办理过谷歌广告收入的美元西联汇款入账,她教我填表之类的;我对着黄经理的头像还笑了笑,因为也是十多年前吧,我上东山岭时拦住了她,问她有十万,买个什么理财好。

柜台窗口受理业务较慢,且后边来的人还可以凭VIP之类的权限插号。我无聊得在网点里走来走去。我留意了一下,当时在厅里等候办理业务的人,年龄看起来都比我大,五十岁以上的吧。我听到其中一个窗口的谈话,大概是因为老人家在自助设备上插卡使用时,把卡插反了,导致卡被吞过,现在他要求在人工柜台上办理业务,不想再去ATM机上了。一个拄着两根拐杖的老大爷,好像是来取钱的,数额我没听清,好像柜员问他是问是不是取两百。一个在前台填着表,说要办理被“非柜”业务的。我还看到有工作人员从里边出来,一只手提着洗衣液,另一只提着一罐食用油,似乎是银行发给客户的礼品。也有不用在厅里排队,直接到里边办理业务的,但我不知道具体是什么业务,反正她比我后来的,倒是比我先办好业务了,出门时脸上还笑嘻嘻跟前台打招呼。

轮到我时,我看了看表,等了约四十分钟。我隔着玻璃,又将遇到的问题说了一下,还特意举起手机,让柜员看限额的界面。我问她是什么原因,她用普通话说不确定,要先查查。然后她让我坐下对着摄像头,摘下口罩后拍照,然后再凭密码调整交易额度。我看到无纸化平板上显示的金额确实是提高了,然后我签了名。她说我用电子签的名太潦草,要我重新签一下。我不得不工工整整地再写一次我的名字。签好名后,我问是不是好了。她让我重装一下邮政银行app,看看是不是有效果。她说我当前的是凭交易密码验证的,限了一万。我操作了一下手机app,还是限额一万。我问是不是一定要卸载重装app,她说是,不然回去后发现不行又要来网点一趟。我有点不耐烦,可能是因为早上喝了杯奶粉,尿出。我想了想,说,就这样,结束办理,我要走了。憋尿对肾不好,我心里对自己说。

出了邮政银行网点,我又看了看表,不到五分钟。路过工行网点时,我走了进去。我拿着手机问保安,手机app上提示要来网点凭电子密码器提升权限,怎么办理。保安瞄了我一下,侧着头向着旁边的自助设备上微微仰了一下头,意思让我去找在那儿的工作人员。我等那个高高、身材笔直的后生小伙。小伙为那个客户办好后,问我干什么。
“我爱改信用卡密码。手机app话爱提升权限。”
“卡呢?”
“佢话密码器之类嘅啊。”我指着app上的界面强调。
“冇用。拿卡来啊。”小伙干练地答。
“身份证呢?”我递过卡给他,他将卡插到自助设备里。又问我要身份证。
我看到设备的屏幕提示拍照,我就取下口罩,拍好。
“签只名。”小伙从另一个客户那转过身,指着屏幕对我说。
我签了。
“重置好了。得了。”小伙说。
“那只新密码系查询密码还系交易密码喔?”我有点困惑,问他。
“吖咪不咪一样嘅?”小伙反问我。
“好,好。得了,得了。多谢。”我也干脆点,想快点儿走,尿又出。

我回到家里,上厕所舒服之后,拿出手机来验证办理的结果。工行设置的密码有效,凭交易密码加电子验证器,可以通过手机app重置卡的密码。邮政银行app依旧限制交易一万,我点击“安全检测中心”后,提示建议,“开通转账汇款权限”和“加办电子令牌,提升转账限额”,这两项都需在网点办理。

对比之下,两间银行办结业务的体验,天上与地下的差别。虽然两者办理业务的实际时间不到五分钟,但工行不用排队等,直接用自助设备操作,工作人员审核就得,办得成功。邮政银行的工作人员对(手机app)业务不熟悉,耗时耗力,做了无用功。邮政银行网点虽然也有设备,有充足的工作人员,但都是摆设般,效率没因此提高。原本邮政银行的网点多是优势,但现在有意减少柜台窗口,降低了服务体验。我原本就恐惧去医院,但如邮政银行工作人员这样戴口罩、拿触屏笔、甚至坐在玻璃窗后边的柜员还戴着橡胶手套操作的场景,令我感到是被“另眼看待”的,如同一个有传染病的病人。倒是工行相对于以前,现在一进门就可以看到两个开放式的柜台,没有玻璃隔着,显得亲近些,十几年前东山路的邮政银行网点不也是这样的开放服务柜台的吗?都戴着口罩,我认不出曾经的“邮妹”,记不到你那张清纯得人切的脸了。

在老 debian 里拿掉 DST_Root_CA_X3 的证书

原因:在老版本的 debian 系统里,使用 curl 或 wget 访问 let's Encrypt 发的证书站点时,会提示证书过期。因为证书中包含 DST Root CA X3 的指向,curl 不会自动选择 ISRG Root X1 的证书,且因为 DST Root CA X3 的证书在 2021 年过期,所以 curl 报错。

尝试:

  1. vi /etc/ca-certificates.conf # 编辑证书配置文件内容,注释掉 DST ROOT CA X3 的证书文件,如 !mozilla/DST_Root_CA_X3.crt
  2. update-ca-certificates --fresh # 更新证书

参考:

给各理财子公司的一封信:你PR2理财不保本,那我赎回不留本

尊敬的各理财子公司:

在2月15日赎回两笔封闭期为季度的理财产品到账后,憋在我心里一段时间的话,现在写信告诉你。

请先看看我的“2022年理财成绩单”,表格数据如下图:

用文字信息罗列一下:

  • 最早一笔理财是在5月11日购买的,最迟一笔是在10月27日。持有最长的时间一笔理财是219天,约七个月。
  • 九个月时间里,总共买了约27笔(次)理财产品,这分属于七个不同的理财子公司。属于青银理财子公司的,占了11次。
  • 统计27笔的理财产品年化收益率,最高的是3.79%,最低的是-3.36%,中位数是2.91%。
  • 最高年化收益3.79%是在11月9日赎回的“青银璀璨人生月定开3007C”,持有了约125天。
  • 最低年化收益-3.36%是在12月9日赎回的"华夏 固收纯债最短持有60天A款E微众专属",持有了约85天。

数据是我自己记录到表格里的,属于PR1的理财没有记录。绝大多数PR2理财产品是在微众银行买的,少数的是在百信银行买的,但因为产品在微众银行上也有,所以这里当作是在同一个销售平台上买的了。

我的个人总结是,买PR2理财,综合收益不如买PR1理财加上销售平台的活动奖励(薅羊毛)。拿微众银行来说吧,我是先买“活期+”,然后“活期+plus”,再过渡到“稳健理财”中的周赎、月赎,最后买了季赎甚至是一年、两年期的。从微众银行的角度来看,这是成功的广告销售案例:用特有的“活期+”产品吸引人流,叠加积分和活动奖励,随着用户对销售平台好感增加,售出高利润的产品。具体到我,从这约九个月的理财结果来看,我觉得投入后获利的钱,换算成年化收益率,是约在2.0%上下。说是“约”,因为我不知道怎么统计,简单用27个年化收益率平均后是2.3%,但我感觉实际值要小些,因为11月下半月后累积的本钱多些,跌到低位后,“伤害多些”,更疼。用网友的话是,“一个月跌去了三、四个月的收益”。当我“领悟”到这时,我觉得我曾在微众银行上的“好感”与“激情”打了水漂,自己只不过是销售平台预先设计好的“套路”中的一个样本。所以,我赎回PR2产品后,就不再看微众银行平台上的任何活动广告和产品信息了。

也许你会说,“投资理财,风险自负”,亏了钱,怨销售平台,这是抹黑。如果说市场核心是公平前提下的互惠互利,共担风险,那么我亏了钱,我能承受。但在如微众银行app上买理财,信息是不对称的。如当11月PR2产品急跌到谷底时,销售app上展示的产品信息,从“近一个月收益率”,调整到“近三个月收益率”、“近六个月收益率”和“自成立以来收益率”,最后有的产品连“自成立以来收益率”也是负的,所以就干脆打两个红色的横线,不显示了。销售平台上展示的产品信息,并不是基于最利于用户的原则。很多人,包括我,之前并不知道“银行理财子公司”,而是通过微众银行app这个平台上了解到各理财子公司和它们的理财产品。销售平台是入口。

销售平台,如微众银行和多个理财子公司不仅在产品信息展示内容上有意筛选,而且没有尽责保护用户的资产。如在11月下半月波动后,缺乏专业金融知识的我,在看了微众银行上发的“给投资者的一封信”后,选择了继续持有理财产品,而没有及时赎回。因为他们在信中说,“持续动荡”、“债券的本息收入是长期稳定增长的”。你销售平台可以为保护自己的利益不说话,不发表意见,但不能违背事实说“静待花开”,暗示行情马上恢复的啊。面对众多亏到本金用户的声讨时,理财子公司回答频率最高的,应该是“理财不保本”这句话了,要我们认真看产品的合同。确实,理财产品的合同是这么写了,且还会用粗体写上“在极端情况下,投资的所有本钱和收益,都归零”。现在我个人看来,这是不公平的合同,因为里边写的“业绩比较基准”,不是承诺的最终收益率,但里边写的“销售费”、“管理费”却是每天固定抽取的;里边写了极端情况下本钱和收益都归零,投资者承担了所有的损失,但理财子公司没有有相应的处罚措施。拿具体的例子来说,我在这理财的九个月里,八个月的收益是骑单车般慢腾腾的踩,但最后一个月的亏损速度是滑梯般刨去了之前积攒大部分收益。这哪里是PR2的中低风险评级的理财产品喔?我觉得我在购买理财产品前,如实完成了测评,是谨慎型的。现在有种上当受骗的感受,要么是理财子公司把产品的风险等级标错了;要么是我昏了头,原本不该买PR2的产品。从产品合同内容来看,理财公司肯定是对的,那么我只能选择赎回产品了。

我以前主要是买存款产品的,但因为上半年发生河南村镇银行事件后,我就转到银行的理财产品了。现在回过头来对比一下,村镇银行赔付后,它还不一定比不上亏了本金的理财产品,这有点让人哭笑不得。理财产品只有银行的子公司才能发行,难不成各大银行的资金投资管理能力,比不上村镇银行的?我将钱从一个地方按“指引”挪到另一个地方的行为,是不是只是从一个坑移到另一个坑?我想方设法尽力想将攒到的本金多生些利息,避免通货膨胀的损失。现在要达到这个目标,很难。

一个卑微的用户

参考: