2020年12月16日星期三

vim 列编辑

 How to do column editing in vim?

https://stackoverflow.com/a/6972206/4539590 

To edit a column, follow these steps:

  1. Stand on the beginning of the column
  2. Press Ctrl+v, then mark across the column you want to edit.
  3. Press Shift+i to insert text at the beginning of the column, Shift+a to append text, r to replace highlighted text, d to delete, c to change... etc.
  4. Hit ESC when done.

 

2020年12月15日星期二

Python strptime()

 Python strptime()

parsing-non-zero-padded-timestamps-in-python 

datetime.strptime():  creates a datetime object from the given string.

 

from datetime import datetime

dt_string = "12/11/2018 09:15:32"

dt_object1 = datetime.strptime(dt_string, "%d/%m/%Y %H:%M:%S")

dt_object2 = datetime.strptime(dt_string, "%m/%d/%Y %H:%M:%S")

2020年11月25日星期三

ogrinfo:操作多个shp文件

 https://gdal.org/drivers/vector/shapefile.html

 

 Normally the OGR Shapefile driver treats a whole directory of shapefiles as a dataset, and a single shapefile within that directory as a layer.

 In this case the directory name should be used as the dataset name. 

However, it is also possible to use one of the files (.shp, .shx or .dbf) in a shapefile set as the dataset name, and then it will be treated as a dataset with one layer.

 

 ogrinfo    -sql "ALTER TABLE  ymss_elements_0  ADD    COLUMN id   integer  "   shapefile_dir

2020年11月23日星期一

ogr2ogr :Spatial Joins

 ogr-spatial-join

OGR command line tools accept only 1 input. But we have 2 inputs for the spatial join. An easy way to fix this, is to use a VRT file. A VRT file allows us to specify multiple inputs and pass them to the command-line tool as layers of a single input.

Unzip the input shapefiles in a single folder on your drive. Create a file named input.vrt in the same folder with the following content.

<OGRVRTDataSource>
    <OGRVRTLayer name="boroughs">
        <SrcDataSource>nybb.shp</SrcDataSource>
        <SrcLayer>nybb</SrcLayer>
    </OGRVRTLayer>
    <OGRVRTLayer name="nursinghomes">
        <SrcDataSource>OEM_NursingHomes_001.shp</SrcDataSource>
        <SrcLayer>OEM_NursingHomes_001</SrcLayer>
    </OGRVRTLayer>
</OGRVRTDataSource>

Open the OSGeo4W shell and cd to the directory containing the shapefiles and the vrt file. Run the ogrinfo command to check if the VRT file is correct.

ogrinfo input.vrt

OGR tools can run SQL queries on the input layers. We will use the ST_INTERSECTS function to find all nursing homes that intersect the boundary of a borough and use the SUM function to find the total nursing home capacity of a borough. Run the following command.

ogrinfo -sql "SELECT b.BoroName, sum(n.Capacity) as total_capacity from
boroughs b, nursinghomes n WHERE ST_INTERSECTS(b.geometry, n.geometry) group
by b.BoroName" -dialect SQLITE input.vrt

You can see that in a single command we got the results by doing a spatial join that takes a lot of clicking around in a GIS environment. We can do a reverse spatial join as well. We can join the name of the Borough to each feature of the Nursing Homes layer. Using the ogr2ogr tool we can write out a shapefile from the resulting join. Note that we are adding a geometry column in the SELECT statement which results in a spatial output. Run the following command:

ogr2ogr -sql "SELECT n.Name, n.Capacity, n.geometry, b.BoroName from
boroughs b, nursinghomes n WHERE ST_INTERSECTS(b.geometry, n.geometry)"
-dialect SQLITE output.shp input.vrt

Open the output.shp in a GIS to verify that the new shapefile as attributes joined from the intersecting borough. You can use ogrinfo command to check that as well.

ogrinfo -al output.shp  

2020年10月26日星期一

in Python (and NumPy), the nan's don’t compare equal

 Working with missing data

One has to be mindful that in Python (and NumPy), the nan's don’t compare equal, but None's do. Note that pandas/NumPy uses the fact that np.nan != np.nan, and treats None like np.nan.

In [11]: None == None
Out[11]: True

In [12]: np.nan == np.nan
Out[12]: False

 

2020年10月24日星期六

ssh ac68u ip

ssh -p 2223 admin@192.168.1.1 'nvram get wan0_realip_ip' 

2020年10月19日星期一

sqlite Doc

https://www.sqlite.org/datatype3.html

https://sqlite.org/foreignkeys.html 

https://sqlite.org/howtocompile.html 

 

spatialite InitSpatialMetaData

  InitSpatialMetadata() very slowly

initialize spatial metadata tables 

SpatiaLite Cookbook 

InitSpatialMetaData 

 SpatiaLite 5.0.0 SQL functions reference list

 SQLite 事务

 

以下方法是有效的,基本上瞬间完成:

BEGIN ;
SELECT InitSpatialMetadata() ;
COMMIT ; 

 

--------------------------------------

默认情况下,SQLite 中每条 SQL 语句自成事务(自动给提交模式)。也就是说,如果你没有使用 begin...commit/rollback 定义事务的范围,SQLite 默认每条单独的 SQL 命令就是有 begin...commit/rollback 的事务。这种情况下,所有成功完成的命令都自动提交。同样,所有遇见错误的命令都回滚。这种操作模式(隐式事务)也称为自动提交模式:SQLite 以自动提交模式运行单个命令,如果命令没有失败,那它将自动提交。

sqlite 创建table后,import csv文件时,忽略表头

 .mode csv

.import  --csv --skip 1 信息.csv       信息

注意:sqlite3.32.0 (2020-05-22)中,才加入   --csv --skip 1  功能。

https://sqlite.org/forum/forumpost/1899051f39 

 Import CSV file to SQLite database (without headers)

2020年10月15日星期四

2020年9月29日星期二

SpatiaLite sql

 SpatiaLite 3.0 SQL functions reference list

ST_GeometryN 

list the tables in a SQLite database file 

 SpatiaLite Cookbook

SpatiaLite database tables management with QGis 2.8 

https://github.com/qgis/QGIS/issues/37790 

SELECT * FROM sqlite_master WHERE type='table';


SELECT id, st_astext(st_centroid(st_geometryn(P.geom,1))) FROM '桥墩位置2020-09-29' as P   WHERE id < 10;


--下面的语句没有执行成功
UPDATE '桥墩位置2020-09-29' SET centroid_geom = st_centroid(st_geometryn(geom,1));

qgis

 Performing Spatial Joins (QGIS3)

Adding Radius Attribute to each Polygon in QGIS? 

Calculating the longest distance within polygon in QGIS 

http://michaelminn.com/linux/mmqgis/ 

how-to-remove-duplicate-point-features 

Nearest Neighbor Analysis (QGIS3) 

2020年9月28日星期一

aka9527

 https://www.aka9527.xyz:4433/

https://www.aka9527.xyz:7000

nginx

 Full Example Configuration

NginxDirectoryStructure  

Controlling NGINX Processes at Runtime 

Module ngx_http_core_module 

python3 http.server 

check if port is in use on Linux

check if port is in use on Linux 

sudo lsof -i -P -n | grep LISTEN
sudo netstat -tulpn | grep LISTEN
sudo lsof -i:22 ## see a specific port such as 22 ##
sudo nmap -sTU -O IP-address-Here

家庭宽带的8080端口不能从外网访问

 家庭宽带的8080端口不能从外网访问

2020年9月27日星期日

Let's Encrypt泛域名SSL证书

 Let's Encrypt泛域名SSL证书

使用acme.sh 手动生成证书(DNS手动模式) 

SSL中间证书的坑

根证书、服务器证书、用户证书的区别

域名.key是秘钥;

a.cer存储的是CA证书,

域名.cer是域名证书,

fullchain.cer是前两者的拼接;

域名.csr是证书签名请求。

----------------------------------------------------

Let’s Encrypt颁发的HTTPS证书一般包括以下几个文件:

cert.key(PEM格式):私钥文件
cert.cer(PEM格式):证书文件
fullchain.cer(PEM格式):包含证书和中间证书

-----------------------------------------------------

PEM
适用于Apache、Nginx、Candy Server等Web服务器
常见的文件后缀为.pem、.crt、.cer、.key
可以存放证书或私钥,或者两者都包含
.key后缀一般只用于证书私钥文件
PFX
适用于IIS等Web服务器
常见的文件后缀为.pfx、.p12
同时包含证书和私钥,且一般有密码保护
JKS
适用于Tomcat、Weblogic、JBoss、Jetty等Web服务器
常见的文件后缀为.jks

2020年9月24日星期四

anaconda condarc socks5代理

 channels:
- defaults
# Show channel URLs when displaying what is going to be downloaded and
# in 'conda list'. The default is False.
show_channel_urls: True
allow_other_channels: True
proxy_servers:
    http: socks5://127.0.0.1:1080
    https: socks5://127.0.0.1:1080
ssl_verify: False

对数坐标

 对数坐标

【数学笔记】对数、对数坐标与分贝 

2020年9月9日星期三

Python 分段函数

 Python:Logical Masks

How to apply piecewise linear fit in Python?

numpy.piecewise 

miniconda3

2022年1月11日更新
Do you wish the installer to initialize Miniconda3
by running conda init? [yes|no]
[no] >>> yes
no change     /home/aka/miniconda3/condabin/conda
no change     /home/aka/miniconda3/bin/conda
no change     /home/aka/miniconda3/bin/conda-env
no change     /home/aka/miniconda3/bin/activate
no change     /home/aka/miniconda3/bin/deactivate
no change     /home/aka/miniconda3/etc/profile.d/conda.sh
no change     /home/aka/miniconda3/etc/fish/conf.d/conda.fish
no change     /home/aka/miniconda3/shell/condabin/Conda.psm1
no change     /home/aka/miniconda3/shell/condabin/conda-hook.ps1
no change     /home/aka/miniconda3/lib/python3.9/site-packages/xontrib/conda.xsh
no change     /home/aka/miniconda3/etc/profile.d/conda.csh
modified      /home/aka/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

If you'd prefer that conda's base environment not be activated on startup,
   set the auto_activate_base parameter to false:

conda config --set auto_activate_base false

Thank you for installing Miniconda3!

---------------------------------------------------------------------------------

You have chosen to not have conda modify your shell scripts at all.
To activate conda's base environment in your current shell session:

eval "$(/home/lyq/miniconda3/bin/conda shell.YOUR_SHELL_NAME hook)"

To install conda's shell functions for easier access, first activate, then:

conda init

If you'd prefer that conda's base environment not be activated on startup,
   set the auto_activate_base parameter to false:

conda config --set auto_activate_base false

Thank you for installing Miniconda3!

Openpyxl column widths and row heights

 openpyxl读取xlsx文件,列宽度有问题,特别是连续列的宽度相同时,得到的宽度都是13。


Excel Array Formula Examples

Excel Array Formula Examples – Simple to Advanced

2020年9月6日星期日

cron

https://crontab.guru/

screen_cheat_sheets


screen_cheat_sheets

perform-commands-over-ssh-with-python

perform-commands-over-ssh-with-python

>>> import  subprocess
>>> subprocess.Popen("ssh -p {port} {user}@{host} {cmd}".format(port='2223', user='admin', host='192.168.1.1', cmd='nvram get wan0_realip_ip'), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
(b'192.36.222.246\n', b'')
 
 
或者使用
subprocess.check_output(  )

2020年9月2日星期三

扫描

想把自己的书籍扫描成PDF,什么样的扫描仪比较合适?
如何 DIY 更简易的图书扫描仪?
http://diybookscanner.org/en/intro.html

bash

BASH Programming - Introduction HOW-TO

bash-redirect-stderr-stdout/

for i in $(seq -f "%05g" 10 15)
do
  echo $i
done
 
for i in $(seq -f "%04g" 2 36)
do
    url="http://www.ttt.com/img/$i.jpg"
    echo $url
    wget $url
done
 
 
for i in $(seq 30); do echo "http://www.example.com/page$i.html" ; done | wget -i - 

install vsftpd FTP Server with TLS on Debian 10

install vsftpd FTP Server with TLS on Debian 10

2020年8月22日星期六

Win10无法删除分区

https://m0n0.ch/wall/physdiskwrite.php

f you are unable to delete all the partitions with the Disk Management utility, try the following procedure:
  1. Open a command window as admin ("cmd")
  2. Type "diskpart" and hit enter.
  3. Type "list disk" and hit enter to find out the number of your drive.
  4. Type "select disk X" (where you replace X with the number of your drive) and hit enter.
  5. Type "clean" and hit enter.

2020年8月14日星期五

2020年8月11日星期二

debian网络设置

how-to-setup-a-static-ip-address-on-debian-linux
debian-reference/ch05.en.html
in /etc/network/interfaces: "auto" vs "allow-hotplug"



SystemdNetworkd
General Network Configuration
archlinux Systemd-networkd

dd

HOW TO MAKE A BOOTABLE USB STICK FROM AN ISO FILE ON AN APPLE MAC OS X

软路由

 ledehome自带的阿里dns,存在bug,只更新子域名,不更新主域名。

单位的网络,把ssh的22端口,封了。 

ESXi、PVE、unRaid对比

 入坑软路由和虚拟化 - 家庭虚拟化及软路由安装配置日志
对vSphere虚拟交换机的理解
虚拟机网络模型详解
ESXi虚拟网络配置的认识
ESXi 配置公网访问
VMware ESXI 6.7 web端配置虚拟机双网卡
esxi6.7在终端开启命令行模式,取消网卡直通
零基础玩转ESXi虚拟机架设软路由、黑裙
管理ESXi 6.7 主机网络与虚拟机网络
Esxi 内两个虚拟设备之间怎么通过虚拟网络链接呢?
ESXI 下面的虚拟机配置公网 IP
用虚拟交换机创建并管理ESXI网络
VMware vSphere 网络设置最佳实践



  基于ESXi的LEDE软路由安装与配置
无法打开磁盘 scsi0:0: 磁盘类型 7 不受支持或无效
x64 OpenWrt(LEDE)v2020.7.18更新v5.4.50内核 UPnP+NAS+多拨+DNS优化
LEDE的vmdk在esxi下提示scsi0:0的磁盘类型不受支持或无效
基于ESXi的LEDE软路由安装与配置
基于ESXi的软路由(LEDE)与黑群晖的安装与配置

esxi安装ax88179, USB3.0网卡驱动
https://flings.vmware.com/usb-network-native-driver-for-esxi

2020年8月10日星期一

fortran

 Why do the GCC C/C++ compilers seem to recognize Fortran code in the errors
Fortran 90 compiling issue
Fortran 77 Tutorial
https://web.stanford.edu/class/me200c/tutorial_77/
gcc.exe error Missing libwinpthread-1.dll, but it is not missing
mingw-and-missing-dlls
Implied DO
fortran debugging
Debug Fortran Code with GDB
How to print Fortran arrays in GDB?
gfortran----Non-Fortran-Main-Program
Known Causes of Trouble with GNU Fortran
Arrays in subprograms
Sub-Array Manipulations in Fortran90
files_input_output.pdf
fortran77电子书
应该在open语句中加入模式参数,指定文件是用于读取还是写入,这样能避免文件名错误。



最终的解决方案:
1、对于丢失dll的问题,将mingw的bin目录加入PATH
2、 undefined reference to的问题:可以使用gcc编译,但要使用gfortran进行链接。

you can compile with gcc as long as you link with gfortran:
gcc -c foo.f95
gcc -c bar.f95
gfortran -o program foo.o bar.o


 If you were working on a project that has portions in a mixture of languages, you would have to link with gcc and supply the necessary options, e.g.
gcc -c c_component.c
g++ -c c++_component.cpp
gfortran -c fortran_component.f95
gcc -o  program c_component.o   c++_component.o   fortran_component.o   -lstdc++   -lgfortran

Pandas: Creating DataFrame from Series

 merge two Pandas Series into a DataFrame
Creating DataFrame from Series
pandas concat ignore_index doesn't work
pandas.concat
merging
pandas.Series.reset_index
sort-pandas-dataframe
pandas.DataFrame.sort_values
pandas.DataFrame.groupby


2020年8月9日星期日

禁止firefox自动更新

 Never check for updates was removed in Firefox 64.
the policies.json is the 'trick' to override the lack of that old preference.

How do you completely turn off update checks in Firefox 64?
You can use a policies.json file to disable updates for all users.
 https://github.com/mozilla/policy-templates/blob/master/README.md

图片批处理

Batch conversion
How to convert multiple files, keeping the same name
mogrify
Batch converting in imagemagic

2020年8月5日星期三

2020年8月4日星期二

bash 快捷键

bash_shortcuts

Controlling the Screen

The following shortcuts allow you to control what appears on the screen.
  • Ctrl+L: Clear the screen. This is similar to running the “clear” command.
  • Ctrl+S: Stop all output to the screen. This is particularly useful when running commands with a lot of long, verbose output, but you don’t want to stop the command itself with Ctrl+C.
  • Ctrl+Q: Resume output to the screen after stopping it with Ctrl+S.

Moving the Cursor

Use the following shortcuts to quickly move the cursor around the current line while typing a command.
  • Ctrl+A or Home: Go to the beginning of the line.
  • Ctrl+E or End: Go to the end of the line.
  • Alt+B: Go left (back) one word.
  • Ctrl+B: Go left (back) one character.
  • Alt+F: Go right (forward) one word.
  • Ctrl+F: Go right (forward) one character.
  • Ctrl+XX: Move between the beginning of the line and the current position of the cursor. This allows you to press Ctrl+XX to return to the start of the line, change something, and then press Ctrl+XX to go back to your original cursor position. To use this shortcut, hold the Ctrl key and tap the X key twice.

Deleting Text

Use the following shortcuts to quickly delete characters:
  • Ctrl+D or Delete: Delete the character under the cursor.
  • Alt+D: Delete all characters after the cursor on the current line.
  • Ctrl+H or Backspace: Delete the character before the cursor.

Fixing Typos

These shortcuts allow you to fix typos and undo your key presses.
  • Alt+T: Swap the current word with the previous word.
  • Ctrl+T: Swap the last two characters before the cursor with each other. You can use this to quickly fix typos when you type two characters in the wrong order.
  • Ctrl+_: Undo your last key press. You can repeat this to undo multiple times.

Cutting and Pasting

Bash includes some basic cut-and-paste features.
  • Ctrl+W: Cut the word before the cursor, adding it to the clipboard.
  • Ctrl+K: Cut the part of the line after the cursor, adding it to the clipboard.
  • Ctrl+U: Cut the part of the line before the cursor, adding it to the clipboard.
  • Ctrl+Y: Paste the last thing you cut from the clipboard. The y here stands for “yank”.

2020年8月2日星期日

Difference between single and double quotes in Bash

Difference between single and double quotes in Bash

find . -type f -print0

Quoting Variables

Clash Win 和 Mac 使用教程

 Clash 常用客户端使用教程

SS/SSR/V2Ray订阅类型转换教程

Clash Win 和 Mac 使用教程

https://github.com/Dreamacro/clash

https://github.com/yichengchen/clashX

clash_for_windows_pkg

一份不负责任的机场使用手册

find xargs

find . -type f -name '【xxxxxxxxxx】*.*'  -print0  |  xargs -0   rename   -e 's/【xxxxxxxxxx】//'

https://shapeshed.com/unix-xargs/

how-to-batch-rename-files-in-a-macos-terminal

make-xargs-handle-filenames-that-contain-spaces

how-to-rename-multiple-files-using-find

xargs-command-examples

find-a-pattern-in-files-and-rename-them


-print0
       True;  print  the  full file name on the standard output, followed by a null character (instead of  the newline character that -print uses).  This allows file names that contain  newlines  or  other  types  of  white space to be correctly interpreted by programs that process the find output.  This option corresponds to the -0 option of xargs.

find . -type f \( -name "*.java" -o -name "*.xml" -o -name "*.html" \)

v2ray多用户配置

v2ray多用户配置

v2-ui,一个全新的多协议多用户 v2ray 面板

V2Ray多用户配置的正确姿势究竟是怎样?

2020年7月27日星期一

石笼网

石笼网尤其是石笼网箱所用的钢丝一般包含三种。网丝、边丝和绑丝。我们拿网孔100mm×120mm的石笼网来说,网丝用300丝的,边丝用340丝的,绑丝一般用220丝。边丝就是石笼网箱12个边都是340丝的,绑丝就是用于捆绑网箱周边的的铁丝。

1.网丝的范围在2mm-4mm
2.边丝一般大于网丝,粗0.5mm-1mm
3.绑丝一般小于网丝,常见的以2.2mm居多

石笼网材的钢丝采用热镀铝锌工艺,钢丝表面镀层更加稳定,可有效减少网线的氧化作用。再经过涂树脂膜工艺后,具有耐腐蚀、防静电、抗老化、抗氧化的特性,使用寿命更长。据试验,将塑料在 30%浓度盐酸中浸泡10天,塑料无变色,无破裂现象。由此可见,即使在高污染地区应用此材料也是可靠的。经过涂树脂膜的钢丝使用寿命可达70年。

2020年7月24日星期五

ftp、sftp客户端

Windows操作系统:WinSCP
OSX或者Linux操作系统: lftp

use_lftp_as_a_sftp_client

 lftp命令

lftp tutorials

 lftp sftp://[user name]@[domain name]:[port number]
 lftp sftp://userName@theURL.org:8002 

将本地目录(包括子目录)上传:
mirror -R 本地目录名

把指定的远程目录镜像到本地:
mirror [OPTS] [remote [local]]

 lftp sftp://admin:password123@serial.local -e "cd upload; put file.txt; bye"

2020年7月19日星期日

2020年7月10日星期五

vim 正则表达式

https://zhuanlan.zhihu.com/p/136058417




windows平台下,
换行符是\r\n,
而在linux下是\n,
这多出来的\r被vim解释成了^M。

vim下 :%s/^M//g 或者 :1,$s/^M//g 均可
补充一点:
^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M



2020年7月5日星期日

联通光猫

联通的,要访问192.168.1.1/cu.html,账户密码都是CUAdmin

2020年6月30日星期二

2020年6月10日星期三

照片EXIF

geotag-and-import-photos-replace-photo2shape-in-qgis-2

exif-py

度量衡

1平方厘米=100平方毫米

1平方米=10000平方厘米

1公顷=15亩=10000平方米

1亩=666.67平方米

1公顷=10000平方米

亩,中国市制土地面积单位,一亩等于六十平方丈。十五亩等于一公顷

2020年3月14日星期六

auotcad技巧


  1. 使用系统变量HPQUICKPREVIEW,关闭填充预览。
  2. COMMANDPREVIEW
  3. FILETABPREVIEW

2020年3月7日星期六

稍有良心,此时都不会要求惊魂未定的武汉人民感恩

稍有良心,此时都不会要求惊魂未定的武汉人民感恩

稍有良心,此时都不会要求惊魂未定的武汉人民感恩

© 褚朝新/文

  3月6日晚,武汉市委书记王忠林主持召开武汉市新冠肺炎疫情防控指挥部视频调度会时提出,要对武汉人民开展感恩教育。
  稍微对武汉人有点感情的人,现在都不会出来说这种话。
  武汉的局势,大家都看到了,截至3月6日,武汉确诊病例49871例,死亡2349例。因为前期准备不足,无力应对爆炸式传播的病毒,还有很多死亡的病例没有被统计进来。
  前天,我听到了2月7日逆行进入武汉援助武汉的复旦大学附属医院副院长朱畴文的一段音频。讲到当时有很多感染的武汉人没有医院接收、不得不留在社区的时候,他哭了,哽咽得不能说话。
  一家数口被病毒吞噬生命的惨剧,武汉不止一起,这是灭门惨剧啊。
  2349条生命,2349次死亡,他们尸骨未寒,他们的家人、朋友、同学都还在悲痛之中,他们的家人、朋友、同学甚至自己都还在医院里躺着等着抢救,根本无力悲伤,此时却有人要对他们加强感恩教育,这是没有人性的行为。
  除了普通的武汉人,武汉倒在一线的医护人员也有数十人。武汉市中心医院,因为感染病毒已经有3名医生病逝;同济医院、协和医院、武昌医院、武汉市急救中心、湖北长航总医院等十余家医院也都有医护人员倒在了抗疫一线。他们,也都尸骨未寒。
  还有数千的重症患者在死亡线上挣扎,方仓医院里、定点隔离点里还有上万人有家不能回,仍活在被病毒威胁的恐惧之中。他们的家人,也跟着一起提心吊胆。
  武汉封城,大几百万的武汉人困在城里,不能出门,吃喝都成了问题。对生活物资紧缺、高价菜等问题不满的声音,不绝于耳。就在3月6日,武汉的青山区一个小区里就有市民向中央指导组喊出了“假的假的、形式主义”的心声,那种愤懑、不满、委屈与不安迅速感染了其他武汉人,视频迅速满网传播。
  这是民意,这是现实,眼睛没瞎、耳朵没聋的人都能看到听到,心没瞎的人也都能感受到。
  武汉人刚经历了一场大难,而且目前大难未消、余祸尚在,武汉人还在继续面临病毒的威胁,仍然活在恐惧之中,惊魂未定。
  此时,近千万仍在遭受病毒威胁的武汉人最需要的是帮助、抚慰和实打实的物资保障,而不是被教育去感恩;上万被隔离在医院、宾馆接受观察的武汉人需要的尽快恢复健康,数千重症患者最需要的是有效的医疗救助,不是被教育感恩;数十万流落在外的武汉人有家不能回,在外流浪甚至受到歧视,他们当下最需要的是回家,而不是接受感恩教育。
  将心比心,此时武汉人真的还没有缓过劲来,还在恐惧与不安之中祈祷灾难早日结束,他们需要的是强有力的保障和帮助,还有那些需要对这场灾难负责的失职渎职官员的道歉,而不是被要求着去感恩。
  要开展感恩教育的言下之意,是武汉人不感恩或者是还不够感恩。我不知道这话,是不是对“假的假的”的一种回应,是不是觉得武汉人对生活物资不足表达不满就是不感恩。
  王忠林如果是这种想法,我觉得他才需要好好接受一下教育:你是人民的公仆,你的工作就是为人民服务,如今你所服务的人民家破人亡,逝去的人尸骨未寒,活着的人泪痕未干,病着的人病体未愈,他们有些不满完全是情理之中的事情,你应该因为你和你的团队工作不到位而反思和惭愧,而不是指责你所服务的武汉人民不懂感恩。
  武汉人不懂感恩吗?我作为一个武汉人不接受王忠林这样的无端指控。
  武汉人的感恩之心时刻都在,他们感恩三万多从外省市到湖北支援的外省医疗队,他们感恩兄弟省市无数捐钱捐物的好心人,他们感恩无数奋战在一线的本地医护人员,他们感恩武汉封城后坚守在岗位的武汉警察、环卫,他们感恩无数默默无闻的志愿者、社区工作人员。如果不知道感恩,那些赞美上述群体的文章不会动辄上百万的点击量。
  除了点赞,他们也在做力所能及的事情。
  黄陂区一个菜农,开着车数次给上海援汉医疗队所居住的酒店送菜,分文不取;无数的武汉市民和志愿者,知道武汉的医护人员吃不好饭甚至没饭吃,默默给武汉的医院送去盒饭等生活物资;很多武汉人深陷围城,也还在捐款捐物……
  这些,不是感恩是什么?
  王忠林从山东济南的市委书记调到武汉担任市委书记,到武汉已经快一个月了,从他这些冷酷无情的话可以看出,他目前对武汉人还没有什么感情。我相信,要武汉人接受这个市委书记恐怕也还需要很长一段时间。