尝试d3js

最近试了一下d3js,感觉挺不错的。 官方网站:D3.js - Data-Driven Documents 教程(在Observable)上:Learn D3: Introduction Observerable真是个不错的网站,感觉比jupyter notebook都好用。 See the Pen d3-dots by SodaCris (@sodacris) on CodePen.

October 17, 2021

没钱了

交了房租,现在所有卡里加起来不到40块钱,对了,加上我私藏的50块,只有不到100块钱。只能花花呗了。 为什么会没钱呢,当然是因为我没工作。上一份工作辞职后就一直混到现在。 找了一份新的工作,目前还没入职。公司看起来又破又小,我也不是很积极。当然了,只有这种公司才会招我吧。 想要研究新的技术,可是朋友们都被互联网所阻隔,看不到我看到的世界。那么,为什么不找一些新的朋友呢。 有朋友,才不孤单。 现在啥证书也没有,应该是能进去的吧,毕竟公司很缺人。然而一切总是偏离我的想象。通勤要2个小时;是有宿舍,但是由于我没打疫苗,所以不能住进去。 工作内容是铁路视频监控系统。然而我还是一无所知。不过一切都会好起来的。 update 11-22-2024 Modern life comes with freedom and loniless. Alert for internet-inspired people. Education enpower oneself.

October 17, 2021

寻找自我

从小的时候, 就没有朋友. 同学总是欺负我. 上了初中, 仍然是这样. 不过成绩也还不错, 和老师的关系挺好. 到了高中, 作业写不完, 当时我又玩, 找了个借口, 开始走读. 然而我又没有朋友. 在家里玩, 让我和同学的隔阂越来越深. 然而家庭环境差距太大, 怎么可能有共同话题呢. 我想帮同学, 也帮不到. 同学也帮不到我. 到了大学, 为了助学金, 开始勾心斗角. 后来又不求上进. 天天在宿舍打游戏; 又挂了科. 到现在, 学位证也没拿到. 在酷安, 在网易云, 在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