我的博客

Windows下编译安装py-leveldb

目录
  1. 编译 LevelDB
  2. 编译 Snappy
  3. 编译 py-leveldb-windows

使用环境 Windows 10,VS 2019(VS 16)

编译 LevelDB

https://github.com/google/leveldb

启动Developer Command Prompt for VS 2019

1
2
3
4
5
git clone --recurse-submodules https://github.com/google/leveldb.git
cd leveldb
mkdir build && cd build
cmake -G "Visual Studio 16" ..
msbuild /m /p:Platform=x64,Configuration=Release leveldb.sln

然后得到leveldb\build\Release\leveldb.lib

编译 Snappy

https://github.com/google/snappy

1
2
3
4
5
git clone https://github.com/google/snappy.git
git submodule update --init
mkdir build && cd build
cmake -G "Visual Studio 16" ..
msbuild /m /p:Platform=x64,Configuration=Release Snappy.sln
1
msbuild /m /p:Platform=x64,Configuration=Release leveldb_ext.sln

编译 py-leveldb-windows

https://github.com/happynear/py-leveldb-windows

1
2
3
4
5
6
7
8
set INCLUDE=C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\include;%INCLUDE%

set INCLUDE=D:\include;%INCLUDE%

set AdditionalIncludeDirectories=C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\include;%AdditionalIncludeDirectories%


set AdditionalLibraryDirectories=C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\libs;%AdditionalLibraryDirectories%

以上配置都无效不知为何并没有起效,最终打开工程文件把D:\Anaconda\include替换为C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\include

D:\Anaconda\libs替换为C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\libs

D:\ThirdPartyLibrary\pyleveldb\leveldbwin\lib_leveldb_vc10\lib\Release替换为C:\Users\v-xiaowensun\codes\leveldb\build\Release

再添加C:\Users\v-xiaowensun\codes\snappy\build\Release

Python 头文件路径:C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\include

Python 静态库路径:C:\Users\v-xiaowensun\AppData\Local\Programs\Python\Python39\libs

计算机存储

目录
graph LR;
    RAM --> SRAM
    RAM --> DRAM
    DRAM --> SDRAM
    SDRAM --> DDR[DDR SDRAM]
    ROM --> PROM
    ROM --> EPROM
    ROM --> RRPROM
    ROM --> Flash[Flash ROM]
    Flash --> NOR
    Flash --> NAND

通过freessl.cn申请免费SSL证书

目录

https://freessl.cn/提供免费的SSL证书。

要使用freessl.cn需要先注册(之前无需注册也可使用)。

可以直接使用默认配置,品牌为亚洲诚信,证书有效期为一年。输入要申请证书的域名,点击按钮创建。然后确认邮箱和创建私钥的方法。

创建私钥最简单的方法是使用浏览器创建。

选择DNS验证比较方便,只需要添加指定的DNS解析就可以了,这里是选择DNS验证后freessl.cn给出的要求。

image.png

下面是腾讯云DNSPod的DNS解析中添加该TXT记录的配置。

image.png

添加成功后可以返回freessl.cn点击验证按钮,一般来说添加成功后很快就可以生效。

验证通过后,马上可以获得证书,包括CA证书,证书和私钥三个部分。其中主要使用证书和私钥。

2020总结

目录
  1. 在学校
  2. 实习
  3. 工作的抉择
  4. 读书

青龙隐深潭,灵龟弃荒驿。
故园去千里,南洋观朵颐。
年少多沾恩,空负凌云志。
独自登高处,飘零十年归。

——2020年11月8日

迟来的总结总比没有好些。

疫情更暴露了西方反动势力宣扬的所谓“自由”世界价值观的虚伪。但中国今天的安定环境和蓬勃发展的形势都是革命先辈们的努力所创造的,并且我相信这不会是一劳永逸的。不论是国家还是个人都应该永远实事求是,坚持不懈地追求真理,为自己的目标奋斗。唯有付出艰辛的努力才能获得有价值的成就。

整个2020年都住在学校,只有一次离开北京,这一年我完成了毕业论文的主体内容,完成了实习并选择了毕业后的工作,很多事情当时没有想得明白,但是一直有人默默给我无私的帮助,帮助我做的更好,我不能不感谢他们,我到目前所取得的种种进展实在是因为他们的帮助和我的好运气,而我自己的努力实在是微不足道的。每每想到这些,我总很会内疚,以后一定要脚踏实地,实事求是,更多的依靠自己的努力去创造,也应该尽力去帮助有需要的人。

这一年过得艰难,一直在处理紧迫的事情,几乎没有能放松的时间,但做事又没有任何效率可言,大半年窝在宿舍,动不动就偷懒,简直不忍回顾。

在学校

机缘巧合,决定2019年寒假留校,却没想到疫情愈演愈烈,从大概过年后开始封校,一直到2020年9月开学,很长的一段时间内学10公寓15层只有我们两个人。公寓的马老师,张老师还有几位其他老师常常会来转,我们下去也总会看到他们值班。还有食堂的工作人员。其余就几乎不再与人接触。

科研楼几乎都在封闭中,我及时把实验室电脑的硬盘拆下来拿到宿舍,所以封锁并没有太影响我的工作进度。寒假的时间过得很快,我买了瑜伽垫开始运动,还有弹吉他和看书,开始过的还充实,但自从开始吃饭的时候看B站,就变得很拖沓。之前我几乎不看B站。

实际上这段时间一直很焦虑,寒假里跟师兄学NLP,做论文,跑实验,感觉很有压力,师兄的思路清晰,提出各种方案,给我找参考资料,疯狂读论文,帮我找实验代码里的bug,还有在几天内写了初稿,又各种修改和更新,操作让我目不暇接,而我总是慢了半拍,直到今天想想还是很紧张,然而我还是会偷懒,有时候遇到困难也没有积极解决,想来十分愧疚,做的贡献实在微不足道。希望优秀的师哥今年能顺利完成自己的目标。

寒假结束后就,一直在远程开组会,同时暑期实习的春招也开始,疯狂笔试面试,虽然准备的乱七八糟,却幸运的得到了很好的机会。

实习

我能遇到yang哥真的非常幸运,拿到实习offer的时候是我半年来最开心的时候。之前一直很压抑。结果实习开始才发现这里压力很大,远远不是我之前想想的那种慢节奏的生活。而且yang哥不仅优秀而且努力,我仍然是目不暇接,而且在宿舍工作很容易偷懒,而且实习还需要用Windows系统,总忍不住偷偷玩英雄无敌III,之前从没有在战役中打过这么多关卡。

实习的收获很大,学习了工作和处理问题的方法,让我大开眼界,还有英语,我的英语实在不好,开会的时候yang哥常常帮我打圆场,一看到我被问就出来救我。

进步总是需要有压力。但我本来是想找个轻松的实习和轻松的工作。

工作的抉择

最纠结的时候问了很多人的意见。占得“颐”挂,查了好多资料,感觉还是不应该贸然离家太远。而且应该懂得知足和感恩,而不是只看到当前的利益。

读书

高尔基的《母亲》,是在下半年结束实习后在实验室读的,买了多年,放在实验室一直没有拆封。从一个不幸的工人家庭的视角展现俄国无产阶级的革命斗争。生活的重担没有压垮母亲,反而让她更加坚强,从

重读《万里十五年》并且找到了一个英文版的pdf,希望能通过阅读学习英语。在本科的时候,姚老师就跟我们推荐过《万历十五年》等书,并且还告诉我们这个书是先有英文版再有中文版,但我之前并没有找到可用的英文版。

gcn-bitcoin

目录

论文:Anti-Money Laundering in Bitcoin: Experimenting with Graph Convolutional Networks for Financial Forensics

代码:

  1. GCN_Elliptic_dataset/Elliptic_dataset_GCN.ipynb at main · JungWoo-Chae/GCN_Elliptic_dataset (github.com)
  2. https://github.com/as5845131421/NMlab_final-Anti-Money-Laundering-in-Bitcoin/

数据:Elliptic Data Set | Kaggle

环境:PyTorch 1.7.1 + torch_geometric-1.6.3-cp36-none-any.whl + CUDA 10.2 + RTX 2080Ti

rusty1s/pytorch_geometric: Geometric Deep Learning Extension Library for PyTorch (github.com)

https://pytorch-geometric.readthedocs.io/en/latest/

nmcli连接WPA2 802.1X的无线网(用户名+密码)

目录

玩客云刷机为armbian后,使用了一个TP-LINK的TL-WN826N(ver 1.0)的无线网卡可以免驱使用。之前试了(TL-WN821N和360随身WIFI1都不行)。

希望在命令模式下用nmcli连接wifi。学校的wifi是需要用户名和密码才能登录的。使用命令

1
nmcli dev wifi

扫描wifi发现加密方式是:

  • SSID MODE CHAN RATE SIGNAL BARS SECURITY

XXXX-mobile Infra 11 54 Mbit/s 50 ▂▄__ WPA2 802.1X

只查到使用密码登录的方式是:

1
nmcli device wifi connect SSID password PASSWD

后来终于找到 WPA2 802.1X 需要的命令(参考资料

1
nmcli connection add type wifi con-name NAME ifname wlan0 ssid SSID -- wifo-sec.key-mgmt wpa-eap 802-1x.eap ttls 802-1x.phase2-auth mschapv2 802-1x.identity USERNAME

第一次登录的时候需要额外使用 --ask 参数输入密码

1
nmcli --ask connection up NAME

这时会要求输入密码

牛客编程巅峰赛S2第5场Python解法

目录
  1. 第一题
    1. 代码
  2. 第二题
    1. 示例1
      1. 返回值
    2. 示例2
      1. 返回值
    3. 示例3
      1. 返回值
    4. 代码
  3. 第三题
    1. 示例1
      1. 返回值
    2. 示例2
      1. 返回值
    3. 代码

https://ac.nowcoder.com/acm/contest/9556

这次题目比周末的简单。

第一题

链接:https://ac.nowcoder.com/acm/contest/9556/A

给你一个含有n个元素的数组arr[i],请你告诉牛牛这个数组的中位数大还是平均数大,如果中位数更大输出1,如果平均数更大输出-1,如果中位数和平均数相等输出0

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
def Answerofjudge(self , arr ):
# write code here
arr.sort()
s = sum(arr)
av = s / len(arr)
i = len(arr) >> 1
if len(arr) % 2 == 1:
x = arr[i]
else:
x = (arr[i] + arr[i-1]) / 2
if abs(x - av) < 1e-7:
return 0
elif av > x:
return -1
return 1

排序,算平均数和中位数

第二题

链接:https://ac.nowcoder.com/acm/contest/9556/B

牛牛非常怕他的女朋友,怕到了走火入魔的程度,以至于每当他看到一个字符串同时含有n,p,y三个字母他都害怕的不行。现在有一个长度为m的只包含小写字母‘a’-‘z’的字符串x,牛牛想知道能令他不害怕的最长子串的长度是多少。(对于字符串”abc”来说,”c”,”ab”都是原串的子串,但”ac”不是原串子串)

示例1

1
"abcdefghijklmn"

返回值

1
14

示例2

1
"ynp"

返回值

1
2

示例3

1
"ypknnbpiyc"

返回值

1
7

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution:
def Maximumlength(self , x ):
# write code here
d = {'n': 0, 'p': 0, 'y': 0} # 统计当前窗口内的三个字母数量
l, r = 0, 0 # 窗口左右指针
ans = 0 # 窗口最大值
f = False # 当前窗口内是否同时出现三种字母
c = 0
while l < len(x) and r < len(x):
if not f:
if x[r] in 'npy':
if d[x[r]] == 0:
c += 1
if c == 3:
f = True
d[x[r]] += 1
r += 1
else:
if x[l] in 'npy':
if d[x[l]] == 1:
c -= 1
f = False
d[x[l]] -= 1
l += 1
if not f:
ans = max(ans, r - l)
return ans

滑动窗口,l 是起始位置,r是终止位置,r - l 是窗口大小(即当前字符串长度)

第三题

链接:https://ac.nowcoder.com/acm/contest/9556/C

给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。

其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。

本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过101810^{18}1018

示例1

1
"1#1#+"

返回值

1
2

示例2

1
"12#3#+15#*"

返回值

复制;)

1
225

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution:
def solve(self , str ):
# write code here
# 解析后缀表达式
x = str.split('#')
xx = []
for p in x:
while len(p) != 1 and not p.isdigit(): # 判断是否粘连 ++ 或者 ++3 类似的情况
xx.append(p[0])
p = p[1:]
xx.append(p)
x = xx
# 后缀表达式求值
ns = [] # 操作数栈
for p in x:
if p.isdigit():
ns.append(int(p)) # 入栈
else:
o1 = ns.pop() # 出栈
o2 = ns.pop()
if p == '+':
a = o1 + o2
elif p == '-':
a = o2 - o1
else:
a = o2 * o1
ns.append(a) # 运算结果入栈
return ns[0]

先按照 ‘#’ split 字符串,这时候可能有 符号 + 操作数 或者 符号 + 符号黏在一起的情况。例如 “1#1#1#1#+++”,这里需要依次处理 split 后的每个元素。只要元素长度大于 1 且不是数字,就一定是粘连的情况,这时候第一个字符必然是符号,把符号取下来,继续验证是否粘连,直到没有粘连。

比特币地址聚类

目录
  1. Automatic Bitcoin Address Clustering[C]// IEEE International Conference on Machine Learning & Applications. IEEE, 2017
  2. Research on Anonymization and De-anonymization in the Bitcoin System[J]. Computer ence, 2015
    1. ATC方法(Analysis of the Transaction Chain)
  3. An analysis of anonymity in the Bitcoin system,in SocialCom/PASSAT 2011

Automatic Bitcoin Address Clustering[C]// IEEE International Conference on Machine Learning & Applications. IEEE, 2017

论文 Ermilov D , Panov M , Yanovich Y . Automatic Bitcoin Address Clustering[C]// IEEE International Conference on Machine Learning & Applications. IEEE, 2017:461-466. 指出

Research on Anonymization and De-anonymization in the Bitcoin System[J]. Computer ence, 2015

论文 Shentu Q C , Yu J P . Research on Anonymization and De-anonymization in the Bitcoin System[J]. Computer ence, 2015. (pdf)介绍了比特币的隐私问题,文中总结了比特币保障隐私的方法:

  1. 比特币地址无法对应到用户
  2. 比特币交易也不包含个人信息
  3. 比特币新交易传播迅速,也很难探测交易发布者的 IP

但是比特币隐私的问题有:

  1. 对于一些中心化的比特币服务者,比如交易所等,能获取比特币用户的身份信息
  2. 用户可能将一些比特币地址公布在网络上,将会导致一些比特币地址被标记
  3. 交易链是公开且可被追溯的
  4. 多输入交易会暴露不同地址的关系(Gathering some or all inputs when sending Bitcoins to others, which may expose other addresses of the sender)
  5. The change address of transactions could be classified by attackers to the sender

文中指出了比特币隐私的漏洞:

  1. F. Reid,H. Martin, An analysis of anonymity in the Bitcoin system,in SocialCom/PASSAT 2011.
  2. Taint Analysis, blockchain.info, https://bockchina.info/en/taint,2015.10
  3. M. Ober, S. Katzenbeisser, K. Hamacher, Structure and Anonymity of the Bitcoin Transaction Graph, Future Internet, vol5, pp237-250, 2013
  4. D. Ron and A. Shamir, Quantitative analysis of the full Bitcoin transaction graph, ePrint 2012:584.
  5. Androulaki, E.; Karame, G.; Roeschlin, M.; Scherer, T.; Capkun, S. Evaluating User Privacy in Bitcoin; IACR Cryptology ePrint Archive, vol. 2012:596
  6. Sarah Meiklejohn, Marjori Pomarole, Grant Jordan, Kirill Levchenko, Damon McCoy, Geo_rey M. Voelker, and Stefan Savage. A fistful of bitcoins: Characterizing payments among men with no names. In Proceedings of the 2013 Conference on Internet Measurement Conference, IMC ‘13, pages 127-140, New York, NY, USA, 2013. ACM.

还有分析比特币地址和真实用户关系的方法:

  1. Androulaki, E.; Karame, G.; Roeschlin, M.; Scherer, T.; Capkun, S. Evaluating User Privacy in Bitcoin; IACR Cryptology ePrint Archive, vol. 2012:596
  2. Sarah Meiklejohn, Marjori Pomarole, Grant Jordan, Kirill Levchenko, Damon McCoy, Geo_rey M. Voelker, and Stefan Savage. A fistful of bitcoins: Characterizing payments among men with no names. In Proceedings of the 2013 Conference on Internet Measurement Conference, IMC ‘13, pages 127-140, New York, NY, USA, 2013. ACM.

还有分析新交易发送方IP地址的方法:

  1. Sergio Lerner. New vulnerability: know your peer public addresses in 14 minutes. https://bitcointalk.org/?topic=135856 , 2015.3
  2. Kaminsky, D., Black Ops of TCP/IP, http://www.slideshare.net/dakami/black-ops-of-tcpip-2011-black-hat-usa-2011, 2015.4
  3. Philip Koshy, Diana Koshy, and Patrick McDaniel. An analysis of anonymity in bitcoin using p2p network traffic. 2014. Financial Cryptography, 2014,469-485.
  4. A. Biryukov, D. Khovratovich, I. Pustogarov, Deanonymisation of clients in Bitcoin P2P network, CoRR, vol. abs, 2014:1405.7418.
  5. A. Biryukov, D. Khovratovich, and I. Pustogarov, Bitcoin over Tor isn’t a good idea, CoRR, vol. 2014:1410.6079.

ATC方法(Analysis of the Transaction Chain)

  1. 交易网络和比特币用户网络(transaction network and the user network
  2. Taint analysis,是 Blockchain.info 提供的一种服务,用于计算一个地址中金额来自于其他地址的比例
  3. Amount analysis,一种用于鉴别混币的方法,每笔输入扣除一个固定比例的混币费用,变成了输出
  4. Timing sequence,混币时,混币请求者把资金转移给混币者,在一定时间内,混币者需要返还资金,攻击者可以通过估计返还的大概时间范围找到这些返还的资金。

An analysis of anonymity in the Bitcoin system,in SocialCom/PASSAT 2011

论文 F. Reid,H. Martin, An analysis of anonymity in the Bitcoin system,in SocialCom/PASSAT 2011. 指出比特币系统的三个显著特点:

  1. 比特币的完整交易历史是公开的,这是客户端可以验证新交易是否合法的必要条件
  2. 交易可以拥有多个输入和输入。而且往往一个比特币交易会有单个较大额的输入或者多个较小额的输入。而对于输出,则常常有两个输出,即一个用于支付,一个用于找零
  3. 收款人和付款人通过公钥、私钥标识,但是一个人可以拥有多个密钥对。

然后论文提出了比特币交易网络和比特币用户网络(transaction network and the user network)。

论文中提到的去匿名化方法:

  1. 发现找零地址:如果一个交易有两个输出,且确定其是某种特定客户端创建的,可以根据其源码确定那个输出是找零,并把找零地址关联到交易创建者地址。

  2. 可以猜测交易金额是某种法币的等价金额,可根据当时的汇率尝试发现法币种类。也可以根据交易所的交易记录关联到交易所。

  3. 如果某些地址经常在相同时间活跃,可以构建地址的共现网络。