阅读视图

发现新文章,点击刷新页面。

WP-UserAgent [纯真增强版] 15.01.01

作者 obaby

之前为了下载纯真的ip 地址数据库订阅了他们的公众号,前几天的时候看到推送说什么数据库格式更新了,有了 czdb 的格式,并且提供了各种语言的 sdk。

不过这个东西应该不是最近才推的,因为印象里貌似很久之前就看到皇家园林写的数据库迁移的文章。官方给的sdk 地址是这个:https://github.com/tagphi/czdb_searcher_php

按照文档操作,感觉也不复杂,直接:

composer require czdb/searcher

composer导入,就一行命令的事,但是为了弄个插件,需要在服务器上装这么个东西?那插件安装到别的地方也麻烦啊。想着一次性解决这个问题,直接下载源码,修改导入方式,按照网上的教程一通改,并不好使,最后 还是请教杜郎,才解决了这个问题:

composer

真不错,直接小花花+1.

下载 copmoser 导出的包,直接扔到插件目录下,

因为最终要修改的是 ip2text.php 文件中的convertip函数,所以直接扔到 show-useragent 目录下,在代码中导入代码,并且初始化:

require_once __DIR__ . '/vendor/autoload.php';

use Czdb\DbSearcher;

$v4databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v4.czdb';
$v6databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v6.czdb';

$queryType = 'MEMORY';
$key = 'n2pf2******************==';

// Initialize the DbSearcher with the command line arguments
// $instance = new SomeNamespace\SomeClass();

$v4dbSearcher = new DbSearcher($v4databasePath, $queryType, $key);
$v6dbSearcher = new DbSearcher($v6databasePath, $queryType, $key);

// $dbSearcher = new DbSearcher($databasePath, $queryType, $key);

function convertip($ip) {
    global $v4dbSearcher;
    global $v6dbSearcher;
    try{
        if(strpos($ip, ':') != false){
            $region = $v6dbSearcher->search($ip);
        }else if (strpos($ip, '.')!= false)
        {
            $region = $v4dbSearcher->search($ip);
        }else{
            $region='Unknown';
        }
    }catch (Exception $e) {
        // Handle the exception and inform the user
        $region = 'Exception';
    }
   
    return $region;
}

这里初始化了两个DbSearcher,分别对应 v4 和v6的查询。查询代码也很简单,就上面这几行。

同样,既然有了国家代码,那剩下的就是去掉原来通过接口查询所属国家的问题了,之前用接口是因为qqwry.dat 旧版本没有 v6 的数据,后来也一直没更新,所以归属地现实国旗是通过接口实现的,现在既然 46 都有了,那就可以直接本地解析了,不过比较坑爹的是 v4 的地址是“-”拼接的,v6 的地址感觉是空格,实际上是个制表符’\t’,为了这个制表符废了半天的劲,一直解析不出来,直接头大:

function getCountryName($str) {
    $parts = explode('–', $str);
    $name = count($parts) > 0 ? $parts[0] : '';
    // print($name);
    if (strpos($name, " ")!==false){
        $parts = explode(" ", $str);
        $name = count($parts) > 0 ? $parts[0] : '';
        // print($name);
    }
    if (strpos($name, "\t")!==false){
        $parts = explode("\t", $str);
        $name = count($parts) > 0 ? $parts[0] : '';
        // print($name);
    }
    return $name;
}

之所以解析不出来是最开始的if (strpos($name, “\t”)!==false)用的单引号,后来才发现,单引号下转义字符无效,这尼玛是凭什么啊,果然 php 是最好的语言。

后面就是讲国家名转换为 2 位国家代码了:

function getCountryCode($countryName) {
    $countryMap = array(
        '中国' => 'CN',
        '美国' => 'US',
        '日本' => 'JP',
        '韩国' => 'KR',
        '俄罗斯' => 'RU',
        '法国' => 'FR',
        '德国' => 'DE',
        '英国' => 'GB',
        '意大利' => 'IT',
        '加拿大' => 'CA',
        // 省略部分国家地区
        '瓦利斯和富图纳' => 'WF',
        '也门' => 'YE',
        '赞比亚' => 'ZM',
        '津巴布韦' => 'ZW',
        );
    $countryName = removeWhitespace($countryName);
    $countryCode = 'unknown';
    if (isset($countryMap[$countryName])) {
        $countryCode = $countryMap[$countryName];
    }
    // ; return $countryCode;
    return strtolower($countryCode);
}

到这里改造基本就全部完成了。

更新日志:

= v15.01.01 =
* 替换本地IP归属地查询数据库为纯真CZDB格式
* 替换IPv6归属地查询,替换为本地数据库,去掉查询服务器配置功能
* 鉴于纯真数据库需要授权码,需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = 'n2pf2******************pg==';
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb

插件安装无法直接使用,请按照下面的步骤操作:

* 需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件

* 密钥配置文件,ip2c-text.php $key = ‘n2pf2******************pg==’;

* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb

实际效果:

插件下载地址:

温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)

半夜“机”叫

作者 obaby

秋天还是不期而至了,原来暖暖的阳光,现在也都暗淡了。对于一个旅游城市来说已经过了旅游旺季,时隔许久在此来到石老人的沙滩,已经看不到太多的游客。每次来到海边,心情总是能放松那么一些,坐在沙滩上,哪怕什么都不干,就这么静静的呆坐着,都感觉时间安静了许多。

路上遇到一家人,迎面走来,一个小女孩蹦蹦跳跳的,大约四五岁的样子,蹦到跟前的时候说了一句:“大美女”。

跟他们擦肩而过之后,她妈妈问:“漂亮吧”。

所以,现在的 e 人真的这么奔放的吗?让我这 i 人大气都不敢出。

毕竟,上班时间找机会溜出来的,该回去公司还是要回公司的。正好,快递给送到菜鸟驿站了,顺路可以去取快递。

家里厨房的推拉门,好久之前就变得非常难用了,拉起来非常费力。上周把门拆下来看了一下,原来是底部的轮子裂掉了。

直接在淘宝,以图搜图,很容易就找到了同样外观的轮子。终于昨天下午送到了,不过在晚上安装的时候,拆开快递发现,寄过来有一个就是裂开的。

这就很尴尬了,联系卖家之后,答应给补发一个。就先酱紫吧,倒是也不是什么大问题。

其他的轮子更换还是比较顺利的,更换之后推拉起来就轻快多了,焕然一新。

这不到十年的房子,已经很多的东西开始慢慢的老化,坏掉了。进入了修补期,不过这个也确实没什么别的好办法。只能哪里出问题修补哪里,好在各种配件倒是还容易买到。

夜里正睡的迷迷糊糊的,被小姐姐给喊了起来,“你看看是什么东西发出的声音,响了挺长一会儿了”

刚想说没听到什么声音,就在这是,传来一阵有节奏的声音,“滴……滴……滴……”声音虽然不是很大,但是节奏比较稳定,感觉像是什么东西发出来的提示音。

其实,半夜能发出声音的,肯定就是某些点子产品或者某个设备。小姐姐也说声音是从机柜里传出来的。

打开机柜,看到最下面的 UPS 的显示屏是亮着的,猜测应该就是它了,但是正常情况下它没什么声音啊。点几了几下屏幕,数据来回切换的过程中,看到一个 78% 的字样,感觉应该是剩余电量的问题。但是现在家里是有电的,怎么会进入 ups 供电呢?客厅空调的显示面板还显示着当前温度 23 度,卫生间的灯也亮着。这一下忽然变得扑朔迷离起来,仔细看了下机柜里面,貌似也没什么问题。

再后来想到,是不是插座的开关跳闸了,往门口的配电箱走的时候,发现扫地的地宝也跑了出来,停在客厅的地毯上,拉开配电箱的门,果然,房间插座那个空开跳闸了。重新给推上去,所有的设备重新上电,房间里感觉亮度都提升了很多。这时候鱼缸的水泵也启动了,传来了哗啦啦的水声,怪不得,刚才总感觉挺奇怪的,那么安静。

回到床上,躺下正要入睡,耳中突然传来“啪”的一声,随之而来的是房间里各种声音又没了,又陷入了安静之中,之后就又传来了“滴……滴……滴……”的声音。看来是空开又跳闸了,回到配电箱那里,却发现怎么推也退不上去了,连续尝试两次之后,就得去找漏电的根源了。

房间里晚上的用电大户应该就是机柜了,先把机柜的电源断开,依然推不上去;随后是洗手间;鱼缸的水泵;都拔下来之后发现依然推不上去。这就奇怪了,不得不想是不是电视柜后面的问题了。把电视柜拉开,发现问题的关键了,不知道什么原因,鱼缸可能是堵了某些东西,水顺着进气口排了出来,下面插电的地方已经成了一篇汪洋,插排都泡在了水里。

把插排拿出来之后,竟然直接有水流了出来,滴滴答答。只好把鱼缸搬到了卫生间,把电视柜后面清理干净。此时重新送电一切就都 OK 了。

这看来的确不能把鱼缸随便放了,这鸡叫,比周扒皮的还坑爹,好在有各种漏电保护,不然这还不知道要出什么问题。

不过这一晚的睡眠,是让着“机”叫,彻底给毁了。

天启Z:完结的起点

作者 obaby

10 月份,观看了 13 部影片,当然,并不是所有的影片都看得那么认真。多数的时候也不妨碍自己在看电影的时候在另一个显示器看看文章,或者无聊的玩消消乐。如果说十月份的影片,还有值得推荐的,那应该是首推《默杀》,这才是应对霸凌的正确方式。其余的影片多数都属于 R18 级别的血浆片为主,《断魂小丑3》也可以一观,当做普通的杀戮片看即可。不要有太多的期望。

11 月份,目前看了四部影片,这几部影片的时长都是比较长的,多的两个小时,短的也得一个半小时。《死侍与金刚狼》之前看了个开头,感觉没有达到自己的期望,就那么一直放着,直到昨天晚上才看完,商业片更多的是商业,剧情中规中矩。反而,西班牙的电影《天启Z:完结的起点》作为一部僵尸片,个人感觉还是达到了自己的预期的,男主也不是所谓的超级英雄,只是一个普通人,在变异狂犬病爆发之后,独自求生的一个过程。这部戏没有女主,当做末日片看可以,当做公路片看也未尝不可。

影片开始,男主的妻子还在抱怨没有孩子的问题,结果,下一秒就在车祸中丧生了。“我还以为你有很多时间”意外和明天,永远也不知道哪个会先到来。之后的求生,也是一波三折,虽然这不影片没有女主,但是却有猫主,一直可爱的小猫咪,不管主角逃到哪里,都没有丢下那只喵咪。人在绝望的时候,这也是一个心理寄托吧。有的末日片,陪伴主角的可能是狗,可能是机器人,也有可能是一盆绿植《这个杀手不太冷》,当然,这个不算是末日片。

影片中的僵尸,不再是那种行动缓慢的,迅速,甚至有一定的智商。现在一些僵尸片已经改变了僵尸的属性,行动缓慢已经不是僵尸片的常态了。不过影片中描述暴乱的镜头,基本都是一致的。等哪天真的发生这种灾害,乱肯定是必然的。

然而僵尸片肿的僵尸,固然有些特定的属性,很容易一眼就看出来,然而,现在这个情况却是,很多人比僵尸更可怕,那种毫无征兆的突然袭击,更让人后怕。最近频出的伤人时间,有那么一瞬间让我忽然觉得,这个现实比影片中的更加的不可捉摸。店门口停车,跟老板起争执,被杀;一瓶矿泉水跟老板起争执,被杀;小米酥妻崩直线,线下约架,杀人;大学生骗钱,被刺数刀……

让我总有一种感觉,预约多的人产生交集,也就有了更多的不确定性。这两年巨大的压力,成了压垮某些人的最后的一根稻草,已经开始破罐子破摔。国内重度精神病比例为 1%,按照这个比例算下来,人数已经相当可观,这种状态,无异于僵尸世界,末日求生。那种不确定的伤害不一定来自于什么人,不一定来自于什么时候。这种高精神压力的条件下,让原来很多人可能不严重的精神状态,变得更加脆弱。随时可能开着车撞向人群,撞向学校。总有刁民想害朕,现在看来,这些刁民是越来越多了。时常爆发的这些恶性事件,也不得不让自己更加的小心警惕。

人间未见僵尸,而僵尸已经无处不在。

免费洗车

作者 obaby

自从提车只有一次车也没洗过,之前从老家开车回来的时候按理说是该洗车的。结果后来就是连日的阴雨,每周都有那么几天在下雨。就更没有洗车的必要了。

4s 店的小哥也经常发微信,让有时间去找他洗车啊。于是昨天下午问了下能不能洗车,得到肯定答复之后,直接开车过去了。

问了下门口的大爷,直接开车到了保养的地方,又在接待的引导下直接开到了洗车区。不过现在洗车位倒是空着的,直接开上去,洗车的大爷一通指挥最后还是没停好,把钥匙交给大爷,大爷又给调整了一下。

不过不得不说,大爷调整了一下,车轮个瓷砖的接缝都对齐了。果然,你大爷还是你大爷。

给小哥发个消息,告知他自己在洗车区,小哥回复说他过来。几分钟后小哥来了,把钥匙交给他,说洗好了之后给自己开过去。让自己去大厅等。

在展厅随便转悠转悠,看了下发现运动,感觉貌似也不是不能买。

白色的车看着还是蛮不错的。

转悠一圈,刚准备找个地方坐会儿,小哥回来了,说洗好了。

到大厅外,小哥问:“是不是跑高速了,上面的这些东西,机器洗不下来。现在后面排队洗车的太多,等哪天不忙的时候你再来,用抛光机给你打干净”。

顺着他指的方向看过去,果然还是有很多的小点点,应该是跑高速的时候落下来的鸟屎,还是空气中那些漂泊居无定所的小虫在撞击之后留下的痕迹。应该也是时间太长了,不仔细洗,或者浸泡一会儿很难弄下来。

“没关系,等我自己找湿巾擦一下吧。谢啦”

小哥跟门口的老头示意,车直接放出去,就这样,前后不过十分钟的时间,洗完了。洗了,感觉又没完全洗。

回到停车场,仔细一看,印子还是蛮多的。

车上也没有能用来洗车的东西,忽然记起来还有瓶卸妆水,于是卫生湿巾加卸妆水尝试擦了一下这些生物痕迹,事实证明效果也还 ok。多擦几次也就都擦下来了。

那就酱紫吧,毕竟免费的不是。

运动相机初体验

作者 obaby

有时候心血来潮的时候,就会买一些毫无用处的东西。有的东西,买了之后一共就用了那么一两次,然后就丢在了某个角落里落灰。

多年以前,曾经买过一个三星的 gare 360 相机,自从买了之后一共就用了两次。主要是这个全景相机也确实没想好怎么用,拍摄的全景照片还需要专门的处理软件才能使用,就让这个东西变得更加的鸡肋。

这个东西前后两个摄像头,看起来还挺好玩的,实际上就是使用起来的确没那么方便。

前几天又对运动相机比较感兴趣,于是,又花重金买了一个运动相机。

这个东西,看介绍是可以直接头戴或者安装在头盔上的。

这个安装效果是不是还蛮不错的?但是呢,实际体验下来就是,那个相机支架太单薄,根本支撑不住相机的重量,在耳朵上根本挂不住啊。哈哈哈。

具体请看 vcr:

刚开始坐着是不是感觉还行?等站起来之后就开始往下掉了啊。

掉下来之后就开始被头发遮挡了,想戴回去也比较困难。这就很尴尬啊。

不过这个东西,夹头发还是挺紧的:

看来得换个相机支架了~~

Python 解析 DLT645 协议数据

作者 obaby

DL/T 645是中国国家电网公司制定的一种用于电能表通信的协议,全称为《多功能电能表通信协议》。该协议主要用于电能表与数据采集终端(如集中器、抄表器等)之间的通信,以实现电能数据的采集、传输和管理。

主要特点

  1. 多功能性:支持多种电能参数的读取和设置,如电压、电流、功率、电能、功率因数等。
  2. 灵活性:支持多种通信方式,如RS-485、红外、无线等。
  3. 安全性:支持数据加密和身份验证,确保数据传输的安全性。
  4. 标准化:符合国家电网公司的标准,便于大规模部署和维护。

协议结构

DL/T 645协议的数据帧结构通常包括以下几个部分:

  1. 帧起始符:标识数据帧的开始,通常为0x68。
  2. 地址域:标识电能表的地址,通常为6字节。
  3. 控制码:标识命令类型,如读取数据、写入数据等。
  4. 数据域:包含具体的命令数据或返回的数据。
  5. 校验码:用于校验数据帧的完整性,通常为1字节。
  6. 帧结束符:标识数据帧的结束,通常为0x16。

常用命令

  • 读取数据:用于读取电能表的各种参数,如电压、电流、功率等。
  • 写入数据:用于设置电能表的参数,如时间、费率等。
  • 广播校时:用于同步电能表的时间。
  • 冻结命令:用于冻结电能表的当前数据,便于后续读取。

应用场景

DL/T 645协议广泛应用于智能电网、电力监控系统、远程抄表系统等领域。通过该协议,可以实现电能数据的实时采集、远程监控和自动化管理,提高电力系统的运行效率和管理水平。

数据报文格式:

数据报文解析相对来说并不复杂,所有的数据都是流式,直接按照顺序进行读取即可。不过里面数据的内容,并不需要在此进行数值转换(电力数据需要处理),基本读到什么内容就是什么内容。

例如原始数据:

message = b'hw8\x06(\x15Dh\x00\x02\x01\x1f(\x16'

解析数据可以通过下面的方法:

def process_645_data(message):
    print('message in hex=', message.hex())
    start_pos = message[0:1]
    # print('start_code = ', start_pos.hex())
    hid = message[1:7]
    # print(hid)
    # int_value = int.from_bytes(hid,byteorder='little')  # 默认使用大端模式
    # print(int_value)
    # int_value = int.from_bytes(hid,byteorder='big')  # 默认使用大端模式
    # print(int_value)
    print('hid = ', hid[::-1].hex())
    hid_hex = hid[::-1].hex()
    # print(hid.hex())
    data_pos = message[7:8]
    # print('data_pos = ', data_pos.hex())

    control_code = message[8:9]
    print('control_code = ', control_code.hex())
    data_length = message[9:10]
    print('data_length =', data_length.hex())
    data_lenth_int = int.from_bytes(data_length, byteorder='little')
    data = message[10:10 + data_lenth_int]
    print('data = ', data)
    crc_code = message[10 + data_lenth_int:11 + data_lenth_int]

    # crc_source = message[0:10 + data_lenth_int]

    # calced_crc = calc_crc(crc_source)
    # print('calced crc = ', calced_crc)

    print('crc_code = ', crc_code.hex())
    end_pos = message[11 + data_lenth_int:12 + data_lenth_int]
    # print('end_pos = ', end_pos.hex())

    return hid, hid_hex, control_code, data_lenth_int, crc_code, data

接收到的数据解析出来之后不需要再进行转换int.from_bytes(hid,byteorder=’little’) 不管是大端还是小端模式,转出来都是错的,直接将高低位倒序输出即可:hid[::-1].hex()

解析后的数据:

message in hex= 68773806281544680002011f2816
hid =  441528063877
control_code =  00
data_length = 02
data =  b'\x01\x1f'
crc_code =  28

对于数据上报的内容,例如电量,电报上报数据为下面的报文:

# 电量上报数据
data_msg = b'\x68\x77\x38\x06\x28\x15\x44\x68\x91\x08\x33\x33\x34\x33\x33\x33\x33\x33\x38\x16'

解析数据内容:

data_msg = b'\x68\x77\x38\x06\x28\x15\x44\x68\x91\x08\x33\x33\x34\x33\x33\x33\x33\x33\x38\x16'

hid, hid_hex, control_code, data_lenth_int, crc_code, data = process_654_data(data_msg)
print(control_code.hex())
print(data.hex())

data_type = data[0:4]
data_source = data[4:]
process_data_type = bytes(byte - 0x33 for byte in data_type)
print(process_data_type[::-1].hex())
process_data_data = bytes(byte - 0x33 for byte in data_source)
print(process_data_data[::-1].hex())
print(int(process_data_data[::-1].hex(), 16) / 100)

解析后的数据:

message in hex= 6877380628154468910833333433333333333816
hid =  441528063877
control_code =  91
data_length = 08
data =  b'33433333'
crc_code =  38
91
3333343333333333
00010000
00000000
0.0

crc 计算方法:

def calc_crc(src):
    sum = 0
    for i in range(len(src)):
        sum += src[i]
    crc = sum % 256
    return crc

 

数据解析处理参考:https://blog.csdn.net/m0_37651448/article/details/143100598

作者 obaby

第一次见到照片与真人判若两人的照片还是在大学毕业的时候,姐妹给了一张自己的毕业写真。照片上的女生,不管是衣服,造型还是容颜,更加的绚丽了几分。也就是这时候才发现,原来照片也可以把人拍的那么漂亮。

当然,自己毕业时并没有那么多钱去干这件事情。直到多年以后其实拍写真感觉也是一件奢侈的事情。相对较高的价格,加上较长的时间,有时候真的挺难挤出这些时间来专注的干一件事情。后来即使是偶尔拍照,也是跟家人一起。自己却从来没有单独去拍过照,就在上周初的时候,在短视频平台看到了一些广告,再后来去大众点评开始看各种写真拍照。

在浏览了一些之后,最终还是下单了。天气渐凉,既然想拍照,那就不如趁现在。咨询了一下可预约的时间,最终订到了周五下午两点半。这个时间,也刚刚好可以请半天假就够了。在此之前,化妆的小姐姐也贴心的发了一下需要提前准备的东西。

青岛的路依然在修着,一条条,一段段,这几年好多的路已经返修过,整体的路况也的确是改善了不少。然而快到目的地的时候,道路一侧已经彻底封闭,原来双向两车道的道路,就剩下一个车道通行。拍摄的地点实在一个小区内,底下停车场异常的广大,兜兜转转跟着路标不断前行,终于过了四五分钟看到了 12 号楼一单元的入口。

虽然在来之前已经选了几套衣服,但是,实际现场还是要试试具体的效果的。选好衣服,跟小姐姐来到化妆间开始化妆。化妆的时间还是比较长的,也画的细致。

不知不觉中,一个小时就过去了。不过等到了拍照环节就快多了,基本换好衣服,简单的补妆。剩下的就是摆 pose,咔咔一顿拍。

尽管如此,等拍完照选完照片也已经快七点了。不过小姐姐画的妆是真不错,要是能印在脸上就好了。

周六,依然是带宝子上课,打球。晚上,宝子问能不能再举高高,结果举起来之后,没接好,直接砸到了自己脸上。就这样,鼻子下面被磕破了,血流不止,宝子也在一边哭。简单的处理了下伤口,贴了个创可贴,这事就算这么结束了。这种高危的活动,毕竟还是存在风险,也是之前玩的时候越来越放松,才导致了事故的发生。

本来周日是准备带宝子去世博园玩的,结果一早起床之后说不想去了。原以为是因为天不好的原因,看着要下雨的样子,然而,实际原因确实她打球的时候摔了一跤,崴脚了。

之前左脚骨折,虽然已经完全愈合。但是,为了保险起见还是带着去了医院,小儿骨科的号码已经全部约满了,只好挂了个普通号。叫号到了之后,一声一看是孩子,开口说道:“小孩的我看不了,骨头还没发育完,去对面的科室,让医生给加个号吧”,不过在去加号之前,还是给开了 x 光的检查单子。

带孩子去加号,拍片,然后回来签到,虽然是加号,但是加的位置应该是应该是在所有号码的后面。不过也算是不错,虽然系统上没号,但是最后毕竟还能给挂上。终于十一点多,叫号,进入诊室,医生查看一番,感觉单纯从 x 片无法断定具体的情况,需要下午再做 ct 扫描。医生给开了下午一点的 ct,就这样。一上午的时间就过去了,中午回家,简单吃点东西,自己的伤口虽然不在那么疼了,但是,却开始肿了起来。本来想着挂着外科一块看一下的,结果外科的号上午没有了,下午的没挂。也懒得现场挂号了,就这样吧。

中午简单的吃点东西,下午回到医院继续做检查。ct 扫完,签到,复诊,进入科室的时候,一声看了下电脑上的 ct 图像,边拖动边说:“ct 的三维建模还没完成,可能还得在等等”

“这里有之前骨折的 ct 扫描单”小姐姐一边说,一边从牛皮纸袋子里把单子取出来递给医生,“这个是不是可以参考下”

医生拿过胶片,双手举着胶片,直接躺在了椅子上。一边使劲的观察,边看边说:“那问题不大了,应该就是普通的扭伤,用云南白药啊之类的喷一下,前三天冷敷,几天后可以热敷” 说完之后,做起来,回到电脑旁,开始写诊断建议。写完之后说:“不给你开药了,直接去药店买就行”

到这里,心里的石头总算是落地了。而幸运之处在于,自己跟宝子对装的过程中,虽然自己伤势严重,但是宝子却并无损伤,主要原因在于她掉下来的时候,牙齿要到了自己的鼻子下面。虽然当时疼,但是主要的力量也基本缓冲掉了。至于自己的这点毛病,那就等明天再说吧。

到了晚上,嘴唇肿的愈发的严重了。整个嘴都嘟嘟了起来,吃饭也很不方便,依然是简单吃点。小姐姐建议吃消炎药,从餐桌旁拿了一版头孢出来。

餐桌旁边总是有一些药放在那个地方,之前也收走过几次,不过每次收走了,就开始有人感冒、发烧等等小毛病。于是继续吃药,后来吃完药就放在了那个地方,成了镇病的吉祥物。

然而,这种外伤,毕竟不是放在那里的药能解决的。人嘛,看来总是得受点伤。毕竟人生漫长,而解药,却鲜有。

现在看来是得挂个号去看一下了,然而,挂号系统显示普通外科最早的号码也到了十一点多。好在整形美容科号码倒是比较充裕,可以挂八点的,这样等看玩了之后可以直接去公司,也就不影响上午的打卡了。最近,公司对于考勤异常变态的监管,的确让人比较抑郁。

挂完号,想着之前看到希望工程圆读书梦的活动,点进去看了下,返现很多的小朋友的愿望都被认领了。往下翻了一下,找到几个,也认领了一个,毕竟,多读书总是好的

早上起床之后,症状依然没有好转的迹象。昨晚挂的号就可以排上用场了,七点半打车,到医院刚好八点。签到,等待叫号。

与其他科室不同,整形美容科相对来说,人就少了很多,并且周末是不上班的。等了没几分钟就叫号了,医生询问了下处理情况,以及怎么处理的。简言之问题不大,但是嘴会继续肿好几天,并且还有内部挫伤,也会变紫。简单的交代了下后续的处理方式,碘伏擦拭,百多邦消炎。其余的变化不大,鉴于自己不想再去药店,让医生帮忙给开药,最后只开了一盒百多邦,一边写一边说:“这个药不在医保范围内,需要全部自费,碘伏不给你开了,你去找个药店买吧” “嗯” 医生都不喜欢开药,看完了就撵你走,这,就很尴尬,本来想着不用再跑药店了。

交费,去药房取药,打车回公司。跑到旁边小区的药店买了一盒带棉棒的碘伏,这个还是蛮方便的,掰断了直接就可以用。先跑到车上处理了下伤口,回到办公室,一群人问自己是不是感冒了。

毕竟,现在戴口罩的话,可能就是感冒了吧,只是,这药毕竟不是万能的。

浑浑噩噩

作者 obaby

又下雨了,连续半个月的阴云密布,早已将夏天的余威扫荡殆尽。气温也倏然一下到了十度一下,而体感温度仅剩下一到两度。周六来公司,也并没有太多的事情,下午收拾下东西。回家,带宝子去上网球课。

车外的低温,竟然让车床上有个一层雾气。从小区停车上出来,收费口停了两辆车。迟迟没有出门的意思,显示屏上显示这,请缴费 6 元。又过了两分钟实在忍不住了,让宝子坐在车上,自己去前面看看情况。

“大哥,咱能快点不?我还着急带着孩子去上课呢”我对着车内的人说道。

“这扫码怎么还得下载,”车里的大哥一边手忙脚乱一边操作者手机,副驾的大姐也没说话。

“用微信扫”

又折腾了半天,也没看到是怎么操作的,就给交上停车费了。终于,第一辆车算是出去了。

回到车上瞄了一眼时间,又几分钟的时间过去了。本来预留了25 分钟的时间,结果这一折腾,最后仅剩下十五分钟不到了。现在无人值守的停车场有时候的确让人崩溃,遇到不会操作的,或者出问题的。来回折腾几次十几分钟就没了。

好在到网球场的时间还不算。把宝子送到球场,自己下楼去打电话。自从换了场地之后,打球的环境好了很多,楼下还有篮球场、羽毛球场。老太太电话接通,没说几句就开始唠叨二姐的事情。事情也很简单,妮想跟着她去干活的地方呆着,不想在家呆了。然后二姐就莫名其妙开始发脾气,脸不是脸,鼻子不是鼻子,一通骂街。老太太说了句,你就带着去吧,又没啥事。二姐来了句,你别管。老太太也就不说话了,最后吵闹了一通还是带着去了。

对于二姐的这种行为已经见怪不怪了,那种极端的性格,想是任谁来都忍受不了吧。现任跟老太太说,等孩子大点就离婚。这些人啊,从来都没什么想法也没什么办法,就这么浑浑噩噩的过着。一年一年看不到任何的变化,二姐已经好几年不回现任的家了,就在老太太那里住着。这个男人有或者没有,区别不大。自己多次跟她提过给孩子要抚养费的问题,她总是说,我不想跟那个太岁(caisui)搭腔,不看着不生气。

就这样,提过几次我也不在吱声了。毕竟,这件事情别人谁也不能越俎代庖。我的想法是怎么让他多出点钱,减轻二姐的负担,而二姐为了所谓的情绪价值,不想生气就这么躲着。不过最终这种躲也没有任何的价值,该发疯的时候还是会发疯,不过针对的对象不是别人,而是自己的家人,指桑骂槐。

不知不觉聊了十几分钟了,去二楼的饮料柜拿了瓶饮料,坐边上的沙发上继续聊。做下去的时候,老感觉右面有个东西,用手一摸,从缝里掏出来一支翻译笔。可能是上个在这里喝饮料的丢的吧。自己断然找不到失主,直接交给吧台的老板把,让她还给失主。

二姐家的好大儿还在家里待着,本来说十一的时候就返校了,结果这又过了这儿多天还在家待着。有时候姐姐们也会说,你给出出主意,规划规划。其实,哪里又有什么主意,不也是浑浑噩噩的混日子,如此而已。对于人生规划也没什么建议,也不知道该怎么建议。

 

回家之后,一边看上周下载的乱七八糟的电影,一边看 rss 的订阅,这时候又看到了别人的评论框的背景图。上次要了个新图之后,小人就不见了,之后不管怎么改都不出来,就很神奇,直接打开网页查看源码发现 css 样式里面多了几个不可见的 unicode 字符。

这几个字符在编辑器里是看不到的:

想来是,不知道怎么复制代码,复制来复制去给贴上了这几个不可见的字符。删除这几个乱七八糟的字符就 ok 了,终于,跳舞的小人也又回来了。

连续几天,补了几部电影,整体来说体验也还可以,不过有的的确是,嗯,剧情拖沓墨迹,不知所谓。

《某种物质》抛开最后二十分钟不说,其实完全就可以结束了,最后的 20 分钟完全没有任何的逻辑,美感可言。的确,可能是打死了卖番茄酱的老师傅,血浆不要钱了。但是,毫无意义啊。2 个小时的影片长度,得强忍着弃片的欲望才能看下去。

《因果报应》这个就更离谱了,也是两个小时的时长,一堆不知所谓的因果叠加,我喜欢扮猪吃老虎,但是不是这么墨迹的扮猪吃老虎。豆瓣 8.6 的评分,是真的因为没看过悬疑片、恐怖片还是因为是对印度电影比较包容?这个东西看的是爽又不爽,痒也不痒。看了四十分钟实在忍不了,直接弃片了。

上篇文章,关于大腿的纹身贴,其实这个东西并非是刻意买的。之前买纹身贴的时候,一大包里面各种图片,其实选不选差别不大,我这人有个毛病,喜欢上一个东西就会想着买各种各种样的。于是就有了一堆不同图案的纹身贴。有小哥哥给我发邮件了,说这个东西是 sm 圈的玩法,的确会有些玩 sm 的贴这个,这个图案其实还有各种其他的不同的变种。貌似每个变种还代表了不同的意思。但是,整体来说还是属于性癖好范畴内的玩具。当然也感谢小哥哥的提示,大家也不要胡思乱想。😂 不过是某种好看的图案,被赋予了一个特殊的含义。仅此而已。

爱好这个东西,也挺神奇的。没有任何的爱好,可能就是浑浑噩噩,有了爱好之后,可能就变成了神经兮兮。为了满足自己的爱好,用各种手段来追寻自己的欲望。

平静的湖面,或许底部暗流涌动,反差由此而来。

sh 脚本给 screen 传递命令【非交互模式】

作者 obaby

之所以要在 sh 中给 screen 传递命令是因为阿里云的 99 的服务器实在是太拉跨了,并且经常会出现各种诡异的 cpu 跑满的情况。目前上面部署了几个静态站点还有 umami 的统计。

先介绍下 screen:

screen是linux下的一种视窗多重复用管理程序。在使用telnetSSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。

umami、moe-conter 都是通过 screen 启动的,这就导致如果服务器重启了就得重新启动 screen,然后在 screen 中运行命令来启动服务。

阿里云的服务器经常莫名其妙 cpu 就 100 了,当然也可能是收到了攻击,但是具体情况感觉还是太频繁了,此时最简单的办法就是直接强制重启。

如果直接把要执行的命令加到 screen 命令之后写入到 sh 脚本,命令无法正常运行。合格的写法应该是下面的样子(一种形式,还有其他形式):

screen -S moe  -dmS
screen -x -S moe -p 0 -X stuff "cd /root/Moe-Counter
"
screen -x -S moe -p 0 -X stuff "sh start.sh
"

注意screen -x -S moe -p 0 -X stuff “cd /root/Moe-Counter 一行指令是回车换行编写的,相当于把回车代入到了 cd 命令后面,这样写的好处是省去了插入回车,也可以用下面的写法:

screen -xS screenName -p0 -X stuff $'\n'

$’\n’ 代表回车,我觉得直接换行是最简单的。

有了启动脚本,剩下的就是编辑服务,添加自启动功能:

vim /etc/systemd/system/myautostart.service

创建自定义服务,添加代码:

[Unit]
Description=My autostart Service
After=network.target

[Service]
User=firefly
ExecStart=/root/sh/start_all.sh
Restart=always
RestartSec=1

[Install]
WantedBy=multi-user.target

重新加载服务:

systemctl daemon-reload

此时在重启,服务就可以自动启动了,省去了人工启动的麻烦。

熬夜游戏 2 — 《触动精灵》之战

作者 obaby

昨天下午还没下班的时候,就收到学校老师发的暴雨大风预警信息。其他的各种信息渠道也在推送这条消息,到了晚上八点多就开始淅淅沥沥的下雨,隔着窗户都能听到雨水滴落的声音。

宝子想让自己陪她玩,但是晚上作业还是蛮多的,就让她先把各种作业做完。自己继续研究自动发朋友圈的问题。前天晚上一直ide 连不上模拟器的服务,导致无法远程运行 ide 带的各种工具也跑不起来,总不能为了获取点击坐标还得截图之后自己去看吧?这就有些离谱了,更何况为了测试这个破东西还花 3 0 多买了安卓版的 vip 年卡。

白天的时候联系客服寻求解决方案,结果两个客服一个离线,另外一个说话阴阳怪气。按照 ide 的提示是账号没有购买套餐或者没有所谓的授权,于是一直觉得是账号 vip 信息没有同步,结果最后才发现是 ide 使用 usb 连接有问题,不得不说,这些傻屌程序员给的提示也是脑子有病,这所谓的客服连自己加的产品的尿性都不清楚,还在那里叨逼叨。

所以这个破东西就是纯粹的 tm 不能用 usb 连接,选择局域网还得开网桥,我本以为 usb 是稳定的,结果 tmusb 的反而不行。

如果安卓版本提示下面的傻逼错误,请更换连接方式:

该账号未授权,请购买套餐或获取试用后再使用
该账号未授权,请购买套餐或获取试用后再使用
该账号未授权,请购买套餐或获取试用后再使用
该账号未授权,请购买套餐或获取试用后再使用
该账号未授权,请购买套餐或获取试用后再使用

就这种傻逼错误,提示了 tmd 还不如不提示,误导人。就 tm 贼烦。王桥链接,模拟器要锁定屏幕尺寸,不然不小心把窗口拖大了或者拖小了所有的坐标都得重来一遍:

最近这段时间又下载了不少电影,但是却没有时间看,就那么扔着,在下载站乱逛的时候发现了《默杀》这个在之前短视频平台看过一点点介绍,感觉有点意思,下载下来一遍改代码一边看。

然而,电影的叙事方式比较混乱,当前与过往来回穿插,导致如果错过了一些镜头可能对于剧情的理解就会出现偏差。暂停电影,把脚本全部写完之后继续观看,不过此时已经十一点了,看了下时长还有一个小时。午夜时分刚好能看完。电影在豆瓣的评分不高,个人感觉作为一部反映霸凌问题的电影还是可圈可点的。人物刻画也比较细腻,正片看下来的感觉就是这个地方没有一个正常人。各种扭曲的行为:霸凌、虐待、强奸(继父强奸女儿)、包庇等等。也有几处意外的反转,不算太强硬,对于人物的精神状态表现还是比较丰满的,所以我在豆瓣上给了五星。对于霸凌的态度,我一向都是以牙还牙以眼还眼的态度,如果自己的女儿被虐杀,我也会做出片中爸爸的这种行为,甚至可能会更加激进。

回到游戏的话题,那就是最后代码改成了下面的样子:

require "TSLib"

toast("朋友圈自动截屏发布工具\r\n by:obaby \r\n V1.03 \r\nhttps://oba.by\r\nhttps://h4ck.org.cn",tim)

current_time = os.date("%Y-%m-%d_%H:%M", os.time()) --以时间戳命名进行截图

w, h = getScreenSize()
-- 右下角顶点坐标最大为 (宽度最大值 - 1,高度最大值 - 1)
snapshot(current_time .. ".png", 0, 0, w - 1, h - 1)
saveImageToAlbum(current_time .. ".png")
state = runApp("com.tencent.mm")
print(state)
-- mSleep(1000);
-- wid = widget.find({["id"]="android:id/home"})
-- if wid then
--      mSleep(1000)
--         toast("此控件支持点击",5)
--         mSleep(5000)
--         widget.click(wid)
-- end
mSleep(5000)

wid = widget.find({["id"] = "com.tencent.mm:id/cl2"})
if not wid then
    tap(570, 1549)
    mSleep(1000)
    wid = widget.find({["id"] = "android:id/text1", ["text"] = "发现"})
    if wid then
        -- mSleep(1000)
        toast("发现页面 点击朋友圈", 1)
        mSleep(5000)
        -- widget.click(wid)
        tap(444, 220)
    end
else
    toast("已经在朋友圈页面", 1)  
end

mSleep(5000)
toast("点击右上角图片", 1)
tap(837, 104)
mSleep(5000)
toast("点击从相册选择")
mSleep(5000)
tap(500, 1350)
toast("选择第一张图片", 1)
mSleep(5000)
tap(170, 202)
-- tap(180,202);
-- tap(170,202,50,'1.png',1);
mSleep(5000)
toast("点击完成", 1)
tap(800, 1542)
mSleep(3000)
toast("点击输入框", 1)
tap(300, 250)

current_time = os.date("%Y-%m-%d %H:%M", os.time()) --以时间戳命名进行截图
inputText("整点报时:" .. current_time)
toast("点击发布", 1)
tap(800, 100)
toast("测试结束", 1)

测试效果:

实际使用定时器的效果:

嗯,基于触动精灵自带的定时运行和循环运行就可以实现整点发布朋友圈了。当然,这个循环也可以直接写代码里,但是那样就有点烦了,怎么简单怎么搞吧。就酱紫,可以愉快的睡觉啦。

❌