Lexsion 发布的文章

简述如何白嫖一个IPFS图床

前言:

网上某位大佬写了一个IPFS图床,原理什么的我也不懂,反正就是有个静态空间把页面放上就可以了。因为原始项目里面接口貌似失效了,这里随手记一下怎么白嫖的。以备日后查询。

项目名称叫:img2ipfs

搭建:

首先从GitHub上把项目下载到本地,用本地的编辑器按需求改一下界面等。这方面需要有一定的HTML基础,或者用Adobe Dw?。

改之前需要理解一个概念,这个图床核心需要两个接口:一个是IPFS API,上传文件用的,上传后会返回cid;另一个是网关,预先录入的网关接口用于和 cid 拼接以输出链接。

网关可以直接使用公用的,比如 Cloudflare 的 cf-ipfs.com也可用自己的域名CNAME跳转或套 Cloudflare解析 为了防止某个公用服务后期失效,网关最好用自己的域名跳转。Cloudflare 不允许跨用户使用CNMAE,就算是把自己域名 CNAME 到 cf-ipfs.com 也不行。目前看,可以CNAME到 infura-ipfs.io 。这些东西需要在域名控制面板上操作。

下面这些大佬收集的网关可以试试看:

cf-ipfs.com  #不行
183.252.17.149:82
ipfs.genenetwork.org
ipfs.fleek.co
ipfs.azurewebsites.net
ipfs.kaleido.art
ipfs.globalupload.io
ipfs.slang.cx
ipfs.adatools.io
gateway.originprotocol.com
ipfs.best-practice.se
ipfs.drink.cafe
ipfs.denarius.io     
crustwebsites.net
bin.d0x.to
ravencoinipfs-gateway.com
ipfs.smartholdem.io
infura-ipfs.io

HTML 文件中网关相关内容在第33行附近,按照需要添加或删除网关。默认网关的设置在static/file.js的第146行附近,默认应该是用的fleek。

API 麻烦一点,公开能用的少见。自己搭就不是白嫖了,所以目前看可以用这个:

ipfsapi.glitch.me

static/file.js文件的第70行,API改一下保存。

找一个免费的 IPFS 文件托管服务商,注册个账号。比如我这里用的 fleek.co

自己用的情况,建个目录把改好的文件传上去,它会给出目录的 IPFS 地址,然后直接打开就可以看到图床成了。把地址收藏一下就可以用了。

考虑共享方便的话需要个好记得地址,可以做一下 CNAME 或链接跳转。也可以按服务商官方得方法搭建,需要先在GitHub上建一个仓库,公有私有都可以,把文件push上去。然后在fleek那里连接一下仓库,因为只是单纯保存页面,不涉及编译啥的,按照默认给出得设置(Other)部署就即可,最后可以按提示在域名服务商处设置CNAME即可。

参考:

PostgreSQL数据库安装踩坑记——升级安装 wiki.js 2.0

前言:

之前搭了个Wiki,用的wiki.js 1.0,如今发现wiki.js 2.0不知更新了几个版本了,这次就把它更新一下。了解了一下,Wiki JS1.X使用的数据库是MongoDB,而2.0则支持多种数据库,包括PostgreSQL、MySQL、MariaDB等多种数据库,但想获得最佳支持,需要使用PostgreSQL,而且如果想实现中文搜索,网上只找到了使用PostgreSQL装zhparser扩展的资料。毫无疑问,笔者只能选择这个之前从未用过的PostgreSQL。整个过程也是参考知乎大佬的帖子完成,因为笔者技术太菜,踩了很多坑。

装完后回过头来发现,如果安装时看到合适的文档,很多坑都是可以避免的。本文不是教程仅用于排错时参考,切勿跟随本文进行任何安装!

此处以安装后的视角总结PostgreSQL安装如何避免踩坑。新安装时参考官方的安装指导(安装指导居然在Download里面,我开始没看见踩了坑),通过yum安装一定要跟随版本号,否则下载下来的是默认的旧版本,发现不对删除再安装新的就会踩各种坑。如果之前出现了这种情况,参考本文编译zhparser部分,将旧版的包完全删除后再通过官方的方式安装新的包,不要装完新的再删旧的,否则还会有很多小问题。

以下为踩坑记录:

删除旧的wikijs 1.0

Linux下杀死进程后进程自动重启怎么处理

使用kill -15 或 kill -9 可以杀掉进程。但有时会发现杀掉的进程会再次启动,我们可以使用以下命令找到进程的父系进程( PPid ),将其杀掉。杀掉前最好看一下是啥,有的可不能随便杀呀。

cat /proc/<PID>/status

使用 ps -ef | grep 进程关键字 语法查询进程。关键字可以是进程名字,也可以是PID。

以上使用ps -aux也可。

PM2管理器

此处通过查询,发现父系进程是PM2管理器,难怪进程杀掉又起来,居然这玩意有PM2管理器。

使用 pm2 list 可显示所有node项目,此处可以看到每一个应用的id。使用 pm2 stop <编号> 可以停止对应应用。

使用 pm2 monit <编号> 可查看此应用详细信息,比如找出应用目录在什么地方。

安装数据库

connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

首先,用某面板程序里自带的脚本装了一下,装完按照大佬们写的Docker下的配置贴尝试继续,发现执行命令 psql 直接报错,好家伙,第一步就进坑了。

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

最后在StackExchange上找到了某个帖子,全是洋文,看了开头几回帖子说装了没版本号的就这样,建议卸除,手动重装带版本号的。

于是骂着面板边去网上找了篇帖子在CentOS下快速安装和配置PostgreSql,按照帖子里面说的装完了,这里我装的是PostgreSQL 13。或可参考:PostgreSQL官方文档

配置数据库并安装插件

Peer authentication failed for user "XXX"

服务起来后创建了wikiJS的数据库,为其配置了对应的用户和密码,也提升了权限。登录又遇到了错误,提示 Peer authentication failed for user "XXX",网上找了一下,说是因为计算机名和数据库名不一致,这种情况要把默认的 Peer authentication 改成 md5 authentication

配置文件 pg_hba.conf 用以下命令打开,不同版本路径会有不同,看一下估计就明白了:

vim /var/lib/pgsql/13/data/pg_hba.conf

找到下面的一行:

local  all       postgres                peer

改成:

local  all       postgres                md5

ESC 、: 、wq、Enter,保存文件退出。

然后执行 systemctl restart postgresql-13 重启服务,这样就解决了。

ERROR: could not open extension control file "/usr/pgsql-xx...nsion/pg_trgm.control": No such file or directory

紧接着,我就在以下命令处再次进坑了:

CREATE EXTENSION pg_trgm;

出现以下错误提示:

ERROR:  could not open extension control file "/usr/pgsql-13/share/extension/pg_trgm.control": No such file or directory

网上搜了一下,Linux 上PostgreSQL 12 pg_trgm扩展安装 一文给出了方法。我把12换成13就可以啦。

root@VPS # yum install postgresql13-contrib.x86_64
···
database=# CREATE EXTENSIONpg_trgm;
CREATE EXTENSION

然后使用以下命令检查是已经安装的插件:

database=# SELECT * FROM PG_EXTENSION;
  oid  | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
-------+---------+----------+--------------+----------------+------------+-----------+--------------
 14160 | plpgsql |       10 |           11 | f              | 1.0        |           |
 16386 | pg_trgm |    16384 |         2200 | t              | 1.5        |           |
(2 rows)

可以看到已经成了。

编译zhparser

接下来毫无疑问, CREATE EXTENSION zhparser; 出现了错误,这是因为没有安装该插件导致的。按照知乎大佬评论区给出的项目链接找到了编译安装指引。整个过程输出信息几乎完全看不懂,但是最后编译安装的回显信息感觉不太对。装完果然补星。

ERROR:  could not open extension control file "/usr/pgsql-13/share/extension/zhparser.control": No such file or directory

网上看了某个网友的踩坑过程,感觉自己又行了。于是跟着大佬思路一通操作,终于将编译出来的文件安装到 /usr/pgsql-13/share/extension 目录了。

再次执行 CREATE EXTENSION zhparser;,我们得到了以下错误。

ERROR:  incompatible library "/usr/pgsql-13/lib/zhparser.so": version mismatch
DETAIL:  Server is version 13, library is version 9.2.

这次的错误信息我能看懂了,明显是表示系统里有不同版本的PostgreSQL,我运行的服务端是13,这定是之前不知什么时候装了个9.2,然后编译出来的也是9.2,不匹配呀。

想来环境中没有其他项目使用PostgreSQL,那么接下来删除这个没用的玩意儿!先使用 rpm -qa | sort 命令查看装了哪些软件包。此处找到了如下9.2软件包:

postgresql-9.2.24-7.el7_9.x86_64
postgresql-contrib-9.2.24-7.el7_9.x86_64
postgresql-devel-9.2.24-7.el7_9.x86_64
postgresql-libs-9.2.24-7.el7_9.x86_64

挨个将其卸除:

yum remove postgresql-9.2.24-7.el7_9.x86_64

以上命令执行时会自动卸除相关依赖:postgresql-contrib、postgresql-devel

yum remove postgresql-libs-9.2.24-7.el7_9.x86_64

顺便扫了一眼13版的包,发现少装了个 postgresql13-devel.x86_64 ,赶紧 yum install postgresql13-devel.x86_64给装上了。

此时,再次执行 make && make install 发现还是补星。提示:

make: pg_config: Command not found
make: *** No targets.  Stop.

问题回归了,提示找不到文件,看GitHub文档意思说可以这么写为指定的版本编译扩展:

PG_CONFIG=/usr/pgsql-13/bin/pg_config make && make install

还是报同样错误。随手搜一下,Stackoverflow大佬说环境变量问题,大佬写的环境变量前面有 export

于是,我在 zhparser 目录下,执行以下代码:

export PG_CONFIG=/usr/pgsql-13/bin/pg_config
make &&make install

这次没错误了,相信插件应该生成了。

bash: XXXX: command not found

还是老命令 psql 连数据库,发现命令无效了。

# psql
-bash: psql: command not found

早知如此,就不卸载旧的了。肯定是把变量空间配置之类的搞丢了。参考:Postgresql -bash: psql: command not found来处理。首先我们需要知道失效的命令对应的文件在哪,此处大量折腾我已经知道在哪了,如果不知道,可以使用 find 命令查找。执行命令 vim ~/.bash_profile ,添加以下行后保存退出,这样,当前的root账户下次登录时就可以了。

export PATH=/usr/pgsql-13/bin:$PATH

重新登录或su切换到postgres账号连接数据库继续配置zhparser插件:

CREATE EXTENSION zhparser;
CREATE EXTENSION

至此,zhparser插件安装成功。

接着继续配置:

CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION pg_catalog.chinese_zh (PARSER = zhparser);
ALTER TEXT SEARCH CONFIGURATION chinese_zh ADD MAPPING FOR n,v,a,i,e,l WITH simple;

-- [二、PostgerSQL全文检索系统之中文支持_jjj的博客-CSDN博客](
-- https://blog.csdn.net/weixin_40746796/article/details/89209316
-- )
-- 忽略标点影响
ALTER ROLE wikijs SET zhparser.punctuation_ignore = ON;
-- 短词复合
ALTER ROLE wikijs SET zhparser.multi_short = ON;

-- 看看 chinese_zh 在不在
\dF
-- 测试一下
select ts_debug('chinese_zh', '白垩纪是地球上海陆分布和生物界急剧变化、火山活动频繁的时代');

接下来退出连接,重新连入 postgres 数据库,关闭 wikijs superuser权限:

\q
psql -U postgres -d postgres
ALTER USER wikijs WITH NOSUPERUSER;
\q

至此,数据库装完了。

安装配置wikijs 2.x

wiki.js 配置管理页信息后登录提示用户名或密码错误

剩下的安装就比较简单了,参考官方文档,新建一个用户,下载、解压Wikijs文件到合适的地方,将 config.sample.yml重命名为 config.yml .使用文本编辑器打开文件,在指定位置填写数据库配置信息、访问端口等。然后node server 运行,浏览器打开,配置管理员信息。注意管理员的邮箱不能有大写字母,否则待会儿登录时会提示用户名或密码错误。

测试可行后 Ctrl +c 停止,参考官方文档 写systemctl,然后添加自启动并运行服务即完成搭建。

域名访问

wikijs本身不支持域名访问,想要通过域名访问,需要套一个反向代理。笔者用的nginx,因为之前装1.0时已经做过了,我这次不需要再做了。

参考:

向Outlook用户发送邮件收到错误码550_5_7_1处理思路

我向Outlook用户发送邮件,遭到退信,错误码550 5.7.1。收到的详细错误信息如下:

Diagnostic-Code: smtp; 550 5.7.1 Unfortunately, messages from [77.88.28.105] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3150). You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.
[VE1EUR01FT034.eop-EUR01.prod.protection.outlook.com]


阅读微软疑难解答链接

  • 微软会随退信附上错误信息,其中包含了一些信息。通过阅读微软给出的链接中描述的内容,了解其对电子邮件的策略,排查自己的发件服务是否违反了某些策略。

  • 如果自己的服务有违反策略,需要先优化服务,避免后期再次违反。

尝试使用除名门户

检查是否被SPAMHAUS封禁

  • 通过访问SPAMHAUS-IP AND DOMAIN REPUTATION CHECKER检查自己的域名和发件服务器的IP地址是否被封禁。网友说如果有被封禁,可以按照网站的提示尝试解封?

  • 域名是自己发送邮件时使用的域名,即发件邮箱地址 @ 后面的内容。

  • 如果发件服务器是托管给服务商的,发件服务器的IP地址也会由服务商提供。该地址可以在退信的错误信息中看到。

  • 如果发现是服务商IP问题,且该IP是共享。可考虑联系服务商处理。

  • 如果发现是自己域名问题,需自查域名被封禁的原因。

检查SPF记录

SPF(Sender Policy Framework)记录是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址。

按照SPF的格式在DNS记录中增加一条TXT类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。正确配置SPF记录可降低来自您域中某个地址的电子邮件最终进入收件人垃圾邮件文件夹的风险。

如何检查SPF记录

可以通过Open-SPF提供的工具对SPF进行检查,以下是自行检查方式。

使用 nslookup 命令可以查看。方法如下:

C:\Users\XXX>nslookup
> server 223.5.5.5
> set type=txt
# 列如QQ邮箱是XXXXXXXX@qq.com
> qq.com

得到如下回显信息:

服务器:  [223.5.5.5]
Address:  223.5.5.5

非权威应答:
qq.com  text =

        "v=spf1 include:spf.mail.qq.com -all"

如果我们继续深究,就会得到更加复杂的结果,如果查询到底,我们便会查到很多用于发件服务的IP。

> spf.mail.qq.com
服务器:  [223.5.5.5]
Address:  223.5.5.5

非权威应答:
spf.mail.qq.com text =

        "v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com include:spf-g.mail.qq.com -all"

判断SPF是否异常

  • 通过上面的查询,我们可以得到很多IP地址,如果我们的服务器IP在这些IP中,说明SPF设置没有问题。

  • 上面查询得到的IP可能会存在类似于 ip4:77.88.0.0/18 的地址范围。通过计算可得子网掩码为 255.255.192.0 ,IP范围为 77.88.0.1 ~ 77.88.63.254

添加SPF条目

如果发件IP信息不在SPF策略中,那便需要进行添加。这个操作需要在域名服务商面板中进行,方法是在DNS中为域名添加一条TXT记录。

比如,我的邮件服务是邮件服务商提供。服务商Yandex也提供了相关的范本。为域名添加一条内容为 v=spf1 redirect=_spf.yandex.net 的TXT记录即可。

如果还需要从非服务商提供的服务器发送邮件,则使用以下格式添加其他服务器:

v=spf1 ip4:IP-1 ip4:IP-2 ip4:IP-3 include:_spf.yandex.net ~all

其中的IP-1、IP-2、和IP-3替换成服务器的IP地址,没有的话就删掉。

只使用自己的服务器发送邮件的情况,那就只写自己的IP就可以了。

v=spf1 ip4:IP-1 ip4:IP-2 ip4:IP-3 ~all

修改后等待DNS信息生效,然后再次检查问题是否解决。注意,DNS的修改可能需要几分钟到几十个小时的时间才会生效。

联系微软支持

如果以上的排查仍然不能解决,则需要考虑联系微软的支持。请微软的技术支持人员核查故障原因。在这之前可能需要阅读策略、做法和指南

使用此操作将向微软发起支持工单,会有微软技术人员处理并回复。因为是人工处理,处理结果的邮件也不能回复,如果一次没有解决,可能需要多次发起工单。

参考

在树莓派上使用JD-Base 自动薅取京东羊毛

前言:

狗东的活动太丰富了,参与需要耗费大量时间。之前看到大佬们使用脚本代替人力来做这件事,甚至GitHub上还有开源项目。于是我决定跟随大佬脚步,给自己也整一个,部署在树莓派上。经过了解,脚本可以使用docker部署,也可以自己搭建环境。但貌似GitHub上的项目仓库都被封的差不多了,这里考虑用docker。

操作:

安装docker:

使用docker部署项目,自然要先安装docker,听说这个东西很简单,我在官网找到了安装说明,说的是Docker Engine有三种安装方法,分别是从存储仓库安装、从DEB包安装和使用shell脚本安装。而树莓派只支持从脚本安装,貌似没得选呀,我此处也不研究到底有没有的选,就按官方文档来吧。注意,docker的安装一般是需要root权限的。

首先,我们需要卸载旧的版本,执行以下命令,如果回显 none of these packages are installed 说明就可以了。

sudo apt-get remove docker docker-engine docker.io containerd runc

执行以下命令获取安装脚本并运行它,然后等待其自动完成Docker Engine的安装。完成安装后Debian类系统下程序就运行了。

 curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

Tips:

  • 如果以后需要卸载docker,使用以下命令卸载Docker Engine、CLI、和Containerd packages:

    sudo apt-get purge docker-ce docker-ce-cli containerd.io
  • 使用以下命令删除相关的镜像、配置信息、文件等:

     sudo rm -rf /var/lib/docker
     sudo rm -rf /var/lib/containerd

安装Docker Compose:

作者提供了一个 compose.yml 文件,它是 Docker Compose 工具的配置文件。通过此工具可以快速部署、分享docker项目。所以此处我们还需要安装它。如果使用的是Windows或Mac下的桌面版本,那应该已经带有Docker Compose,而Linux需要单独安装。此处我使用的树莓派,不支持直接二进制安装,所以通过pip安装。

运行此命令以安装依赖:

sudo apt install python3-dev python3-pip libffi-dev gcc libc-dev cargo make

通过pip安装 Docker Compose,此时前面的 python3 -m 表示将调用Python3处理,详见参考。

sudo python3 -m pip install docker-compose

Tips:

  • 如果您需要卸载Docker Compose,可运行以下命令使用pip安装的本工具卸载:

    sudo python3 -m pip uninstall docker-compose

部署JD-Base:

首先创建一个空目录,文件名自定,比如我是用的jdauto。然后我们把作者提供的 docker-compose.yaml 放入到之前目录,然后运行以下命令开始构建:

sudo docker-conpose up

部署完成后会看到相关登录信息,比如端口号默认是 5678 ,用户名是 admin ,密码是 adminadmin

确认无误按 Ctrl + X 停止。下次如果想要后台启动,可以使用 -d 选项,这样服务就会以分离模式(detached)运行。

修改配置信息:

JD-Base的服务运行起来后,我们便可以通过IP:5678访问配置页面了,输入用户名和密码登录。

向下滚动,如下所示,找到通知Token处,选择一种通知方式进行设置。

################################## 定义通知TOKEN(选填) ##################################
## 想通过什么渠道收取通知,就填入对应渠道的值
## 1. ServerChan,教程:http://sc.ftqq.com/3.version
export PUSH_KEY=""

## 2. BARK,教程(看BARK_PUSH和BARK_SOUND的说明):https://github.com/RikudouPatrickstar/jd_scripts/blob/master/githubAction.md
—————————略—————————————

回到上面最开始处,设置Cookie,可以看到扫码获取已经无效了,浏览器获取有效期很短。所以使用仓库自带脚本wskey.js来自动更新cookie。

在容器的config目录下的wskey.json文件中填写wskey,wskey需要自行抓包。抓包方式本文不展开,下面会附链接。

以上信息填好后我们需要回到网页的配置设定中,将第一个cookie中随意填入几个字母,否则脚本会因没有cookie不执行。

然后点击手动执行选项卡,在脚本名称处输入 wskey ,然后点击提交,等待其完成执行,然后就可以在配置设定中看到正确的Cookie了。

去Linux shell中使用 sudo docker-compose restart 命令重启docker。如果处于前台运行,使用 Ctrl + C 停止,然后使用 sudo docker-compose up -d 在后台启动。

在后台以分离模式运行时,使用 sudo docker-compose stop 可以停止服务。

此时,我们便完成了整个部署,里面某些任务可能当天不会执行,可以去手动执行里面按需手动运行一下。

参考:

群晖共享下文件名中出现回车符导致Windows无法读写的处理

前言:

笔者的群晖里面存储的一些文档,突然之间发现不能读取了,尝试打开时Windows系统提示找不到路径。经过再三尝试发现,这些文件可以在Linux下正常读写。在热心网友们的帮助下,经过探索,最终发现不知在哪个阶段、何种原因,文档的名称和扩展名之间被添加了一个回车符(ASCII控制字符,代码:CR,十六进制编码:0x0D,)。而包含这种特殊字符的文件名,在Windows系统下是非法的。最终在网友们的帮助下,解决了这个问题。

简单说一下是如何发现这个特殊字符的。经过热心网友(flaribbit)指导,我使用 ls -l > filename.txt 命令将目录下的文件信息输出到一个txt文本中。然后使用WinHex之类的16进制编辑器直接打开,找到扩展名前的一个字节,查看其数值,然后从ASCII码表中查询即得到结果。

处理过程:

群晖系统的shell太过简单,很多命令不支持,所以我们需要先把其挂载到其他系统中。比如,我挂到了运行Raspbian系统的树莓派下。

Linux系统下挂载CIFS (samba)共享:

以下命令中:

  • //Server 是服务器(即群晖)的主机名或IP
  • Remote_Diretory 是服务器(即群晖)共享的目录(文件夹)名称。
  • Local_Directory 是本地的挂载点,本地的一个空目录(文件夹),需要提前创建好。
  • 后面的 usernamepassword 是用于访问共享的用户名和密码。

挂载命令:

mount -t cifs //Server/Remote_Diretory Local_Directory -o username=xxx,password=xxx

所有操作完成后记得卸载,卸载命令:

umount <Local_Directory>

替换文件名中的回车符:

知道了原因,我们处理的方法有很多,可以写shell脚本,可以用Python写个小程序。此处笔者使用了Linux下的一个软件,名叫 rename。这个软件包群晖上没有,所以我将目录挂载到了Raspbian。

如果系统提示找不到rename,使用以下命令获取:

sudo apt install rename

先使用 cd ./Local_Directory/XXX/ 来到文件的目录,使用以下命令轻松将该目录下所有文件的名称中的回车符去掉:

rename -v  's/\r//g' *

这样就完成了,如果没有其他问题,此时在Windows系统下已经可以正常读写这些文件了。

考虑Linux系统下的兼容性,如果您想要将文件名称中存在的空格换成 _ ,可以使用以下命令:

rename -v  's/ /_/g' *

记得卸载文件系统:

umount <Local_Directory>

以上命令可能看起来有点懵,如果没有学过正则表达式的话。此处稍作解释:

  • -v 是 --verbose,用于在终端中打印成功处理的文件名称,让我们看到处理了哪些文件。

  • 's/ /_/g' 正则表示将空格替换成 _ ,可以看到三个斜杠 / 中有两个位置,前面填入的是要匹配的内容,后面填入要改为的内容。如果后面什么都不填(不是空格!),就是将前面要匹配的内容删掉。

  • 像是要匹配回车符这样的控制字符,或是特殊字符,我们需要使用转义字符来处理,即在前面添加反斜杠。如回车符是 \r

如果我们需要将所有的txt文件的后缀名删除,可以使用以下命令:

rename -v  's/\.txt$//' *.txt
  • 正则中 . 前的 \ 是转义字符。

后记:

经过热心网友们的讨论,我们解决了问题。大佬(Sparkle)提供了使用Python实现的代码,笔者没有测试。

import os
for i in os.listdir('.'):
  os.rename(i,i.replace('\r',"))

总结:

遇到问题,我们首先要明白这是个什么问题,如何用简练的文字把问题的现象描述出来。然后在各大搜索引擎中搜索。搜索无果我们回头继续思考,这可能是什么原因?可以借助调试、日志、转储等判断导致问题的原因。最后分析一下,解决问题大致是个什么流程,可以分成哪些步骤,需要学习哪些新的知识,然后一步一步的学习、解决。

记维修搜狗录音笔C1

前言:

之前从老王那里入了两支坏的搜狗录音笔C1,很多大佬上车了。据说这批货是售后出来的,状态良莠不齐。花了一点时间,最终我这两支拼成了一个。本文简述过程,记录部分资料以备日后使用。也顺便试一下用IPFS(星际文件系统)作为图床效果如可。

以上图片大小为3386KB

维修过程:

首先,我对两支录音笔进行了测试。其结果如下:

一号:外观尚可,外壳完整,右侧有些许撬痕。拆机发现严重进液,主板严重腐蚀,通电发现大短路不开机,MIC FPC有腐蚀,后测试发现MIC坏,排线有腐蚀断线。

二号:外观不良,外壳有磕伤,撬痕极其明显,结构变形不佳。电池亏电,充电后可正常开机并连接手机APP,MIC排线有多处弯折与裂痕,LED不亮,MIC变形。

很明显,如此情况只能两支拼一支了。首先将一号机的底壳与二号机的主板电池装在一起,然后将二号MIC排线的接插件替换到一号排线上,再将一号MIC排线上的两个MIC换新、腐蚀断点飞线。这期间我顺便简单跑了一下MIC_FPC的线路。

MIC脚位定义:

MIC内部构造:

FPC连接器脚位:

脚位 功能 脚位 功能
5 LED_VCC 6 LED_R
4 GND 7 LED_G
3 CLOCK 8 LED_B
2 MIC_OUT 9 R/L & VDD
1 GND 10 GND

最终将一号排线与一号中壳、上盖等组装在一起。与底壳主板等简单装配后实际测试录音、转写等功能没有问题。但录音的音质一般,这有可能是我换的MIC质量不好(可能性不大)导致,也可能是产品性能仅限于此了。

使用感受:

正如上文所述,感觉录音的音质一般,这有可能是我换的MIC质量不好。个人拙见,搜狗录音笔C1适合用于会议记录与采访等场景,专业的视频录制收音确实不适合。虽然这笔有两个MIC,但只有降噪用途,其并不能录制双声道立体声。

获取转写功能:

此机器的主要卖点是录音转文字服务,简称转写服务。此功能不是本地完成的,而是将录音文件上传云端处理。搜狗有一个名为 搜狗录音助手 的APP有偿提供此服务,后来我们通过淘宝了解到,搜狗录音笔C1带有终生免费的转写服务权益。

经沟通客服了解到:免费转写服务权益会绑定在第一次绑定录音笔时使用的账号上,此权益可以迁移一次。咱们这种货,肯定不是第一次绑定啦,所以绑定后不会获得终生免费的转写服务权益。根据从客服处了解的信息,咱可以提供机器的SN(SN查看:绑定后在APP左上角点击录音笔图标,SN在出现的录音笔管理页面最下方)和新账号(一般是注册的手机号),然后客服登记后台转移权益。转移后便会获得有效期至2201年的转写服务。

这种事情,我们需要与搜狗客服沟通过程需要一些技巧。不要说自己的机器是售后报废机,可以说是朋友赠送的。至于咱们怎么修的,这个没有必要的情况也不必跟客服讲。客服告知我们的权益转移流程需要提供之前绑定的账号,我们可以告知其朋友说不记得了,一般客服也不会再要求必须提供之前的账号,只要有机器SN和咱的新账号他们就会帮咱处理。

那么,如何与客服取得联系呢?APP里面有啦!搜索添加微信公众号:搜狗AI黑科技。

注:本文图片托管于IPFS(星际文件系统),由CloudFlare IPFS网关提供图片解析,插图可能会随时间久远而丢失!