2024 年终 - 致谢幕

前奏

本来没想写年终的,但最近很多糟糕的事情都一并发生了,加上昨晚搞自动化刷鱼翅被加辣直接封禁了3天,禁言状态让我对自己也有了很多思考,起了离开的动念,顺带做一个年终回顾

着重提一下,并不是因为加辣,我从来都不是感情用事的人,一直认为,越是在事情紧迫的时候放纵情感,越容易做出事后后悔的事情,所以这个事情跟加辣无关,只是刚好给了我一个空间可以想想自己的事情

其实早就想走了,在鱼排的日子占用了我不少时间,虽然我总归能找到各种摸鱼的办法,但应该远没有鱼排能更消磨时间了,我的书架上堆满了很多新书,都是这几年买的,如果回家之后只想躺平,那么把书带到公司趁摸鱼的时候把它们看完或许是最好的选择,当初买书也是为了实现理想中的自己,一直摸鱼确实不太行

之前就想走结果走了大半年又跑回来了😂

(杭州近期拍摄照片镇楼)

1f49ff6929ed3c8dc6531bd5a501638.jpg

铺垫

2024在鱼排其实没有太多记忆,毕竟摸鱼嘛,天天聊天打屁有什么记忆,乐

不过收获还是有的,我平时用perl比较多,一直想转去python,但说实在的用习惯之后切换语言总归没有那么顺畅,虽然它们之间真的很像,是鱼排拯救了我的py😭 如果不是为了在鱼排实现自动化的和机器人各种玩耍,我还不会这么天天玩py,精进甚深,颇感欣慰

今年最大的事大概是我换了一次工作,这次更换非同以往,工作六年下来我换工作也算频繁的,基本做到了一年一换,但那更多是在思考自己是否真正热爱工作内容

我是生物专业出身,和鱼排调性不是很搭(笑),众所周知,生物行业是四大天坑之一,其坑在于国内生物的暗弱,这是一个典型高投入高风险的行业,百万千万的仪器在实验室里比比皆是,而配齐这些仅仅只是开始,没有这些东西甚至连实验都无法开展,初创成本就高出太多,但成果却少得可怜,生物的一大特性就是,不稳定,“一切皆有可能”,这不是一句假话,曾经看过搞笑算法之奇迹算法,其原理就是等待计算机因为被宇宙射线等因素发生0/1互换,从而完成的算法,但在生物领域,这种“奇迹”每天每分每秒都在上演,研发成果不可控,复现差,初创公司一个产品能推向市场平均需要十年时间,而生物产品又不能简单上市,就算千辛万苦研发出产品,还要到处找合作医院做一期二期三期临床实验,医院大多都嫌麻烦不肯好好做,完了还需要药监局进行场地检查审批,各种记录、措施必须一应俱全,十年时间导致的人员变动、仪器变换等,使得药监审批成了生物公司的超级大考,死在这一步的产品、公司数不胜数,高投入高风险低产出

因此,生物公司普遍做不大、做不强,生物行业从业人员也是普遍工资低、发展前景渺茫,又因为高技术性成为了唯学历论的行业,所以,前几年每年都在更换从业方向,历经分子、病理、测序,直到前年,才终于确定学程序走生信的路

那么今年的更换出于什么原因呢?工资,我第一次因为工资原因离职而不是我想找一个我喜欢的方向

很高兴现在的公司给了一个不错的薪资,让我上班颇为愉快,这也是我决心离开的一个点,工资高了,也不能像以前那样轻描淡写,少摸点鱼多学学,真能多点钱,也能完成自己一向来的心愿,做我心目中的自己,至少能出发不是?

另外今年也没什么正经相亲,毕竟快30大魔法师了,略过吧

高潮

好我的事讲完了,这部分是我这一年在鱼排玩自动化的分享,算是我在鱼排一年的收获?(笑)直接给代码,不过注意最近鱼排更换了连接方式,增加了不同节点,这部分我还没来得及写,鱼油可以自行修改,添加想要的功能,用python写的,关键模块为websocket

#!/usr/bin/env python import re from datetime import datetime # 获取时间 from websocket import create_connection, WebSocketApp import shelve # 持久化存储键值 import json import requests import hashlib import time import os import random # 当前运行路径 path = os.getcwd() abs_path = os.path.split(os.path.realpath(__file__))[0] user = "abspath" password = "xxxxx" # 从持久化数据读取api api_file = abs_path + "/api_file.db" db = shelve.open(api_file) # 打开数据库文件 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', 'Accept': 'application/json', } # 获取时间 def get_time(): # 获取当前时间 now = datetime.now() # 格式化时间输出,只包含小时、分钟和秒 current_time = now.strftime("%H:%M:%S") return current_time # 获取md5加密后登录密码 def get_key(user, password): global headers # 要加密的字符串 string = password # 创建一个md5加密对象 md5_object = hashlib.md5() # 更新加密对象,这里需要确保输入的是字节串 md5_object.update(string.encode('utf-8')) # 获取加密后的16进制字符串 md5_hexdigest = md5_object.hexdigest() # 目标URL url = 'https://fishpi.cn/api/getKey' # 要发送的JSON数据 json_data = { 'nameOrEmail': user, 'userPassword': md5_hexdigest } # 发送POST请求,自动将字典转换为JSON格式的字符串 response = requests.post(url, json=json_data, headers=headers) # 获取返回的JSON内容 json_content = response.json() if json_content['code'] == 0: apiKey = json_content["Key"] with open(f'{abs_path}/yupai_key.txt', 'w') as f: print(user, apiKey, sep="\t", file=f) return apiKey # 检查apiKey是否可用 def check_key(apiKey): global headers # 目标URL url = 'https://fishpi.cn/api/user?apiKey=' full_url = url + apiKey response = requests.get(full_url, headers=headers) # 获取返回的JSON内容 json_content = response.json() return json_content # 领取昨日活跃奖励 def get_active(apiKey): global headers url = 'https://fishpi.cn/activity/yesterday-liveness-reward-api?apiKey=' full_url = url + apiKey response = requests.get(full_url, headers=headers) # 获取返回的JSON内容 json_content = response.json() return json_content['sum'] # 输出蓝色粗体文字 def print_blue(text): print("\033[1;34m" + text + "\033[0m") # 输出红色粗体文字 def print_red(text): print("\033[1;31m" + text + "\033[0m") # 输出绿色粗体文字 def print_green(text): print("\033[1;32m" + text + "\033[0m") # 登录信息 def when_open(ws): print_green("鱼排聊天室已连接") # 关闭信息 def when_close(ws, status_code, close_msg): print('断开连接成功') # 错误信息 def on_error(ws, error): print("Error: " + str(error)) # 发送聊天室信息 def send_info(apiKey, to_info): global headers url = 'https://fishpi.cn/chat-room/send' now_week = datetime.now().weekday() # 要发送的JSON数据 json_data = { 'apiKey': apiKey, 'client': "Python/1.0", "content": to_info } # 发送POST请求,自动将字典转换为JSON格式的字符串 response = requests.post(url, json=json_data, headers=headers) json_content = response.json() print(json_content) # 获取私信 def get_private_letter(): global headers,md5_pass time.sleep(2) # 等待2秒私信反应 # 目标URL url = 'https://fishpi.cn/chat/get-message?apiKey=' full_url = url + md5_pass + "&toUser=sevenSummer&page=1&pageSize=5" response = requests.get(full_url, headers=headers) # 获取返回的JSON内容 response_dict = response.json() items = response_dict.get('data', []) for item in items: ... # 接收ws回复信息 def on_message(ws, message): get_msg = json.loads(message) if get_msg['type'] == "revoke": next # 信息被撤回的标志,不输出 if get_msg['type'] == "customMessage": next # 高级尊贵的土豪入场信息,不输出 # 打印信息中的时间 info_time = get_msg.get('time',get_time()) # 获取在线人员信息 if get_msg['type'] == "online": print_green(f"{info_time} ","") print_green("已接受到在线人员信息") elif get_msg['type'] == "msg": # 聊天室信息 # 将换行信息转为一行 get_msg_text = get_msg['md'].replace("\n", " ") # 精简样式 get_msg_text = re.sub(r'<\/?span.*?>','',get_msg_text) # 打印时间 print_green(f"{info_time} ","") # 打印昵称信息 print_blue(f"{get_msg['userNickname']}({get_msg['userName']}) ") # 打印信息本体 print(f" {get_msg_text}") md5_pass = db.get(user, '99') check_json = check_key(md5_pass) if check_json['code'] == -1: print(f"{user} 密钥失效,重新获取,间隔5秒发起请求") time.sleep(5) md5_pass = get_key(user, password) db[user] = md5_pass # 修改数据库中密钥值 print_green(f"当前用户: {user}") # 领取昨日活跃 user_active = get_active(md5_pass) if user_active == -1: print("昨日活跃积分已领取或不存在活跃") else: print(f"领取昨日活跃积分: {user_active}") # 连接聊天室 now_time = get_time() print_blue(f"{now_time} 连接聊天室") wss_url = "wss://fishpi.cn/chat-room-channel?apiKey=" + md5_pass try: ws = WebSocketApp( # 连接URL wss_url, on_open=when_open, # 开启连接 on_message=on_message, # 接收信息 on_close=when_close, # 关闭连接 on_error=on_error # 错误信息 ) # 启动WebSocket客户端 ws.run_forever() except KeyboardInterrupt: # 使用Ctrl+C中断时执行 # 手动断开连接 when_close(ws) print("手动断开") # 关闭数据库 db.close()

谢幕

好吧其实写这总结的时候还是在想会不会被放出来?会不会被放出来?会不会被放出来?

写了一上午还是没有被放出来,看来还是我心不够坚定,风白闭门思过去了

什么时候会回来呢?等我看完了那一书架的书,学业有成之时吧,不然就是我背弃人生了

事已至此,属于风白的时间结束了,感谢看到这里的鱼油

(要不爆个照?)