寻找自我

从小的时候, 就没有朋友. 同学总是欺负我. 上了初中, 仍然是这样. 不过成绩也还不错, 和老师的关系挺好. 到了高中, 作业写不完, 当时我又玩, 找了个借口, 开始走读. 然而我又没有朋友. 在家里玩, 让我和同学的隔阂越来越深. 然而家庭环境差距太大, 怎么可能有共同话题呢. 我想帮同学, 也帮不到. 同学也帮不到我. 到了大学, 为了助学金, 开始勾心斗角. 后来又不求上进. 天天在宿舍打游戏; 又挂了科. 到现在, 学位证也没拿到. 在酷安, 在网易云, 在tg上看他们聊天, 然而没有相同的硬件条件, 终究不是同一个世界. 现在满脑子都想着打游戏; 想着同学也是这样, 这样欺骗自己. 然而同学都去读研了, 去了大公司, 好学校, 有了自己的圈子. 我的朋友, 我的世界, 在哪里呢. 或许只有走得足够远, 才能找到吧.

October 14, 2021

做一个快递员的经历

为什么想当快递员呢,因为我在网上投了简历,大多数没有结果。看了智联招聘上的视频,底层的工作给的支持比较多。像是房地产销售,有8000保底,好多个月,还有人教,和住宿。 我的上一份工作让我感到心累。一个不大的公司,更像家族企业。陈旧的代码,固定的模式,每一个文件都有2000行。没有自动构建,集成测试;编译要半天,代码控制也不完善,人们直接提交到主分支,用的是svn,有时候人们就没法编译,没法运行。用于军工通信的项目,人们连测试数据都没有,一切按想象进行开发。 不使用TCP进行完整检查, 企图自己实现传输控制, 代码当然是又臭又长. 不使用DHCP自动分配IP, 反而通过SNMP手动分配. 每个设备不能自己获取参数, 反而加了一个手动传参数过去的功能, 称作"加注". 居然还想实现路由控制的功能, 但整个体系还是建立在IP之上的, 怎么可能呢. 工资只有6000, 实习三个月, 相当于工资只有4800. 去修电脑, 修电脑的师傅都惊讶, 工资怎么这么低. 去智联招聘上找岗位, 然而大多数都要求本科学历. 我现在相当于是专科学历. 为什么我是专科学历呢, 因为我看不起那个毕业论文的题目和方式, 就没写毕业论文. 人们都在混, 都在编, 都在抄. 现在研究生在扩招, 学历在贬值. 学历挺重要, 学历又一点都不重要. 从上一家公司辞职后, 混了半个月, 无所事事, 在CSDN上答一些问题, 打几局王者荣耀. 每天吃外卖, 导致我攒了好多餐具. 钱慢慢花完了, 只能找工作了. 从智联招聘上看了快递员的岗位, 居然有6500+, 比我工资高多了. 投了简历, 第二天就有人联系我, 介绍了一下. 提供车辆和住宿. 去了当地的一个网点, 然后就有人教. 跟着学了几天, 开始自己送. 但德邦的快递很多都是大件, 就很累. 而且送的同时还要收件. 没人负责一个片区. 自己跑了跑, 把片区搞熟悉了, 但摆件的顺序不对, 导致我都是看到一件一件的送, 跑了好多重复路. 有些还要求固定时间去送, 根本记不过来. 前天送到9点多, 感觉忙不过来, 就辞职了. 当快递员, 见了很多人, 去了很多地方. 以前都看不到的. 中储粮大厦非常高级, 电梯还有保安. 鲁谷营业部非常脏乱差. 医院居然也可以进去. 见了各种楼房的结构. ...

October 13, 2021

C++中auto的使用

// Basic 10-element integer array. int x[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Range-based for loop to iterate // through the array. // Access by value using a copy // declared as a specific type. // Not preferred. for( int y : x ) { cout << y << " "; } cout << endl; // The auto keyword causes type // inference to be used. // Preferred. // Copy of 'x', almost always // undesirable for( auto y : x ) { cout << y << " "; } cout << endl; // Type inference by reference. // Observes and/or modifies in-place. // Preferred when modify is needed. for( auto &y : x ) { cout << y << " "; } cout << endl; // Type inference by const reference. // Observes in-place. // Preferred when no modify is needed. for( const auto &y : x ) { cout << y << " "; }

September 26, 2021

从虚拟环境切换到远程开发

由于各种各样的原因, 总会用到Linux. 比如, 在Windows中不想使用庞大的Visual Studio时, 使用Visual Studio Code开发C++代码, 这时使用的时MinGW环境, 但调试时, 容器的内容却显示不出来. 应该是gdb在Windows中的pretty-printer的问题. 而在Linux中, 调试时, 容器的内容可以正常显示. 但是使用Linux系统, 总会有各种不方便的地方. 如不能使用QQ, 微信等, 或者需要各种workaround. 又会担心界面不美观等等. 然后我试了下在Windows上的虚拟机. 使用VirtualBox或VMware, 下载镜像, 一步步安装. 但这又带来了各种问题, 有时候会存储空间不够, 需要另外添加空间, 与主机交互不方便, 消耗内存和CPU, 运行缓慢, 需要手动进行各种配置(网卡, 内存, 备份, 代理) 等. Multipass和vagrant解决了以上的部分问题. 不再需要手动配置, 可以使用简单的命令行来管理. 但在主机上运行会消耗内存, 下载软件又消耗流量. 想到我有一个服务器, 那可以使用远程开发吗? 于是试了试VSCode的Remote-SSH功能. 真的是太方便了. 工作区, shell, 调试功能, 都非常方便. 而且还可以转发端口, 让体验和本地开发一样. 远程的build在电脑关闭后还可以继续运行. (当然需要tmux挂起来啦) 另外, 将代码放到GitHub中, 可以随时访问.

September 26, 2021

代码的政治性

原文链接:Coding is political 译文(使用Google翻译): 编码是政治性的 我经常被问到为什么我如此关心帮助人们学习编码。我总是回答说代码就是力量,学习编码会给你力量。你对代码了解得越多,你就越了解技术平台和产品对人们生活的影响——无论是通过特定功能的实现,还是某些功能的缺乏实现。这些影响是否有意为之并不重要。例如,当您构建了一个社会重要部分用于交流的平台时,您的代码会对社会本身产生直接影响。当您编写有助于确定谁获得贷款的代码时,您会影响谁有能力买房。 在美国和世界上许多地方,非常清楚的是,那些拥有权力的人不顾一切地坚持这种权力,并愿意使用武力——“任何必要的手段”是一个非常常见的短语——坚持那份力量。并且这种力量被不成比例地用于对抗黑人、土著人民和任何可以归类为少数群体的人,达到令人难以置信的程度。 当您学习编码时,请注意您正在获得的力量。在您从事项目时,无论是您自己的项目还是由其他人控制的项目,请专注于共享权力的项目。请拒绝从事巩固权力的项目,尤其是那些将其用于反对他人的项目。

July 27, 2021

TDLib编译错误

今天编译TDLib,出现了以下错误: td/tdutils/td/utils/crypto.cpp:899:25: error: too few arguments to function ‘int EVP_MAC_init(EVP_MAC_CTX*, const unsigned char*, size_t, const OSSL_PARAM*)’ 899 | res = EVP_MAC_init(ctx); | ^ In file included from /home/soda/td/tdutils/td/utils/crypto.cpp:28: /usr/local/include/openssl/evp.h:1179:5: note: declared here 1179 | int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, | ^~~~~~~~~~~~ 应该是我安装的OpenSSL版本太新导致的(编译安装)。 搜索得到EVP_MAC_init的文档,里面提到: int EVP_MAC_init(EVP_MAC_CTX *ctx, const unsigned char *key, size_t keylen, const OSSL_PARAM params[]); If key is NULL, the key must be set via params either as part of this call or separately using EVP_MAC_CTX_set_params(). ...

May 2, 2021

一个项目的fix

最近研究知识图谱,看到了两篇知识图谱的文章[1][2],里面提到了一个项目,本人下载下来后,遇到了一些错误,在此把fix的过程分享一下。 先看README 第一步就是pyltp库安装不上,上网搜索得知,LTP库已经支持python了,只需要pip install ltp即可。 然后安装neo4j,选择对应的平台下载,解压后运行bin/neo4j console。此时终端显示: 2021-04-28 12:48:56.162+0000 INFO Starting... 2021-04-28 12:48:58.117+0000 INFO ======== Neo4j 4.1.8 ======== 2021-04-28 12:48:59.236+0000 INFO Performing postInitialization step for component 'security-users' with version 2 and status CURRENT 2021-04-28 12:48:59.236+0000 INFO Updating the initial password in component 'security-users' 2021-04-28 12:48:59.721+0000 INFO Bolt enabled on localhost:7687. 2021-04-28 12:49:00.579+0000 INFO Remote interface available at http://localhost:7474/ 2021-04-28 12:49:00.580+0000 INFO Started. 然后访问http://localhost:7474/,使用默认用户名neo4j密码neo4j登录,然后修改密码。填入config.py中。 然后执行python .\neo_db\creat_graph.py,出现ImportError,在IDE中发现这一行标灰没什么用 from py2neo import Graph, Node, Relationship,NodeSelector 删掉这一行就可以运行了。 由于把依赖从pyltp改为了ltp,涉及到的代码均要修改。首先是KGQA/ltp.py,修改后的代码如下。 # -*- coding: utf-8 -*- from ltp import LTP def cut_words(words): ltp = LTP() seg, hidden = ltp.seg([words]) pos = ltp.pos(hidden) return seg, pos def get_target_array(words): arr = [] seg, pos = cut_words(words) for k in zip(seg[0], pos[0]): if k[1] in ('nh', 'n'): arr.append(k[0]) return arr 其他均为一些小的修改,具体可以查看Git Repo。 ...

April 28, 2021

tampermonkey验证码识别

首先安装tesseract。 参考: Installation tessdoc/Home 编译安装方法 参考:Compiling-GitInstallation 通过pip安装pytesseract 后台: #!/usr/bin/env python # ocr backend import asyncio import websockets import base64 from io import BytesIO from PIL import Image import pytesseract async def get_ocr(websocket, _): while True: # base64 encoded img file data = await websocket.recv() seq = 'base64,' pos = data.find(seq) + len(seq) x = base64.b64decode(data[pos:]) # img file img = Image.open(BytesIO(x)) # result a = pytesseract.image_to_string(img) out = a.strip().replace(" ", "") print(out) await websocket.send(out) start_server = websockets.serve(get_ocr, "127.0.0.1", 5678) asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_forever() 参考: ...

April 24, 2021

ctrl+z导致powershell中docker命令行意外退出

最近经常使用 pwsh(PowerShell Core)连接 docker 访问 PostgreSQL 数据库,当我编辑命令的时候,可以使用 Ctrl+左右方向键进行左右词间的跳转,或者使用 alt+backspace 进行以词为单位的删除。 I frequently use pwsh to access docker-based postgresql database recently. It supports Ctrl+left/right edit on the command line. Use alt+backspace can delete words. 然而,当我多删了一个词的时候,长时间使用文本编辑器的习惯使我按下了 ctrl+z,希望进行恢复。这时,意外发生了:docker 命令行退出,返回到了 pwsh prompt。 But, When I acceidently press more backspace, I want to use “ctrl+z” to recover. An incident happens: docker command exited! 我尝试进行了一些搜索: I tried some searches: ctrl+z terminate docker terminal suspend and recover in powershell docker windows “ctrl z” 得到了一些相关的内容: ...

November 19, 2020

psql常用命令

命令 Command 作用 Action \h [NAME] help on syntax of SQL commands, * for all commands \d[S+] list tables, views, and sequences \d[S+] NAME describe table, view, sequence, or index \l[+] [PATTERN] list databases \echo [-n] [STRING] write string to standard output (-n for no newline) \i FILE execute commands from file \cd [DIR] change the current working directory \c[onnect] connect to new database \conninfo display information about current connection \q quit psql

November 15, 2020