vi的BUG? vi的功能!CTRL+s & CTRL+q

从十几年前加入公司的网络安全团队并且和开始主要和Linux打交道以来,vi就成了我几乎每天都要接触的工具。


(图源 :pixabay)

其实在那之前也和Linux打交道,但是需要写代码或者编辑内容的时候,我都是在Windows下用UE编辑好,然后用sftp等上传到Linux系统下。

越接触vi,越发现vi的强大,各种编辑功能应有尽有,甚至可以同时打开多个文件,多屏同时编辑,并且可以在不同文件之间使用指令复制粘贴,比用鼠标方便多了。

不过缺点也是有的,当然了这缺点其实是我记忆力的缺点,就是有些复杂指令总是记不住,时不时的要翻一下手册。这种情况,在这些年和Linux打交道不那么频繁并且年纪越来越大之后越发明显。

不过这都不算啥,最严重的是,随着年纪增大,最近手脑开始不协调了。比如用着vi,却时不时的想用Ctrl+s来保存一下文档。

其实我很清楚vi保存文档的指令是w/wq,可是可能是最近在Windows下工作多了的缘故,手完全不受大脑指挥,自己擅作主张地做出动作。

问题是做别的动作也就罢了,这个Ctrl+s按出去后,vi的界面就卡住了,无论我按什么都没有响应,和死机了一样。

我重新起个终端,再次编辑这个文件,还会被提示这个文件正在编辑啥的,要清除一个.swp文件才能继续工作下去。

于是每隔几天,手就擅作主张地犯一次错误,然后开新终端,删除.swp,继续工作,都成了固定流程了。

今天突然想到,这么强大的vi,怎么会有这样的BUG呢?这不科学啊,于是Google查了一下,发现这竟然真的不是BUG,而是vi的一项功能(确切地说是TTY的功能)。

Many terminal emulators and real terminal drivers use the CTRL-S key to stop the data from arriving so that you can stop a fast scrolling display to look at it (also allowed older terminals to slow down the computer so that it did not get buffer overflows). You can start the output again by pressing the CTRL-Q key.

When you press the CTRL-S key, the terminal driver will stop sending the output data. As a result of this, it will look like Vim is hung. If you press the CTRL-Q key, then everything will be back to normal.
(来源:http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl#32.1)

简单来讲,Ctrl+s(XOFF)就是告诉远程终端关闭回显,这样我们敲的字符就不会在界面上显示出来,而实际上还是在工作的(也就是说并没有死机

知道了这点,找到如何恢复也很简单了,就是使用Ctrl+q(XON)来恢复,在vi窗口里试了一下,果然好用。

~/.bash_profile~/.bashrc中加入如下指令,可以在服务器上禁止这个信号(当然也可以每次登录时手动执行😄):

stty -ixon -xoff

或者可以在putty对应会话中,将IXONauto修改为Nothing

image.png

不过,既然知道了缘由,也知道了如何恢复,设置与否就不那么重要啦。

相关链接


This page is synchronized from the post: ‘vi的BUG? vi的功能!CTRL+s & CTRL+q’

细数那些年挖过的坑😳

今天突然想起来,自己一个关于EOS REX的坑还没有填完,只写了上集,没有写中集或者下集,网上常常用太监了来形容这种情况。

image.png
(图源 :pixabay)

好吧,我坚决不能允许这样的情况出现,这个坑我早晚要去填上,REX其实我已经搞懂了,就是感觉整理成文字还是挺费劲的。

除了REX外,最近挖的一个大坑就是想介绍一下投资理财产品,毕竟有句话咋说的来着:你不理财,财不理你,巴菲特也靠搞投资发家了,咱不指望发家,抵御一下通胀也好。

image.png

我本打算从存款说起,然后说说各种理财产品、各种基金,再谈股票,然后黄金、原油、比特币啥的,瞎写下去,弄它个几十篇。

然后写完第一个存款之后,发现每个产品想介绍明白,都不是一件容易的事,况且最近自己投资的东西都在赔钱,就没兴趣写下去了。

image.png

说到大坑,就是想写一系列的STEM with Arduino教学贴,然而我辛苦一整天弄出的第一个帖子STEM with Arduino(1):Arduino介绍、Arduino环境下载&安装、blink示例被STEM那边无视后,我就怎么也提不起来兴趣了。

太看重收益,其实是不对的,不过这种教程贴其实真的很耗费精力的,要连接硬件,要弄示意图,要写代码,要测试,还要整理成文章,没点动力激活不了。

image.png

说到Arduino,又不由得想起了我最大一个坑,那就是用Arduino 制作双轮(玩具)自平衡车系列。

其实这个系列我用Arduino/Genuino 101以及Curie的BMI160弄过一次,第一次弄范了好多错误,包括PID之类的都是第一次接触,所以最终我做好的平衡车跌跌撞撞,很容易就趴地上。

汲取第一次失败的教训,我打算用Arduino UNO或者Nano配合MPU6050、TB6612FNG来重新实现,最后这系列写到第10个帖子就写不动了。

image.png

其实自己挖的坑真的好多好多,一总结,自己都吓一跳,还有好多系列的坑我就不发上来了,丢人,猴年马月也不见得能填上啦。

相关链接


This page is synchronized from the post: ‘细数那些年挖过的坑😳’

每天进步一点点:STEEM/HIVE公钥(Public Key)生成探索

上一篇文章中,我们探索了STEEM/HIVE私钥(Private Key)是如何生成的,得出结论是和比特币一样一样的,那小伙伴们有没有很好奇,STEEM/HIVE公钥(Public Key)又是如何生成的呢?

image.png
(图源 :pixabay)

讲真,我也很好奇啊,那一起来探索一下吧。

比特币的公钥

之前学习比特币相关内容时,我们得出过如下结论:

  • 公钥(K)可以通过椭圆曲线运算由私钥(k)计算得出
  • 私钥(k)到公钥(K)计算公式: K=k∗G
  • 生成过程使用secp256k1标准中定义的椭圆曲线以及一组数学常量
  • 从私钥(k)到公钥(K)结果是确定的,并且只能单向运算
  • 使用Python的ecdsa库,可以轻松实现私钥(k)到公钥(K)的计算

并且有如下代码:

1
2
3
4
5
6
7
8
9
import ecdsa
from binascii import hexlify, unhexlify
secret = unhexlify('a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e')
order = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).curve.generator.order()
p = ecdsa.SigningKey.from_string(secret, curve=ecdsa.SECP256k1).verifying_key.pubkey.point
x_str = ecdsa.util.number_to_string(p.x(), order)
y_str = ecdsa.util.number_to_string(p.y(), order)
compressed = hexlify(bytes(chr(2 + (p.y() & 1)), 'ascii') + x_str).decode('ascii')
uncompressed = hexlify(bytes(chr(4), 'ascii') + x_str + y_str).decode('ascii')

其中涉及到compressed以及uncompressed,可以参考下图:

image.png
( Source: 《Mastering Bitcoin》)

将我们之前的文章中得到的私钥代入上述代码,得到如下两种类型公钥:

image.png

不过怎么看和STEEM/HIVE的公钥都不像呢?

比特币地址

再来想想我们拿到的私钥,是用加了前缀(0x80)并用Base58Check编码的256位二进制随机数,最终是可以阅读的字符串,那公钥是不是也应该利用差不多的方式生成可阅读字符串呢?

在比特币系统中,地址的生成方式如下:

image.png
( Source: 《Mastering Bitcoin》)

STEEM/HIVE中地址:

STEEM/HIVE中是不是也是这样呢?我看了一下steem-python代码,发现并没有使用比特币地址的生成方式,而是使用了如下编码规则:

1
2
3
4
def gphBase58CheckEncode(s):
checksum = ripemd160(s)[:4]
result = s + hexlify(checksum).decode('ascii')
return base58encode(result)

简单来讲,就是把我们之前获取比特币形式的公钥,使用gphBase58CheckEncode编码即可。

让我们来测试一下,对之前代码生成的公钥进行编码:

image.png

1
2
3
4
5
6
原始私钥:  415ac848c316b406920e0a4b43adc7f93c45bb89124f80ced8d1f50fae4f080d
编码私钥: 5JK4yeeivq6j3y4sVwZESJiuBPdi1ZinnePreZ1syeQ9HAMWzBH
压缩公钥: 02f5810b31e23d76a1b8a76cfe43d7168abbaf6363c3927aafaf4751697488d329
非压缩公钥: 04f5810b31e23d76a1b8a76cfe43d7168abbaf6363c3927aafaf4751697488d329147d6d4e232cf7de60d94b3962ea260894fe02274223b2a3050eb9b7e655ab4e
压缩地址: 6kcRebtq32xhvWU169smx9W8wRcENWMDMv11mEZNAM8CwxM3r9
非压缩地址: 3s64c2YwPXWh3GEky4TmJeqGsEbXtBReey9byPwtzGrEUfdqiyWCwZkiqPqLuGbMpiLcu1UQAUoHFTZ6sYVNDHzqCnMjJX

通过分析steem-python代码,可知地址都是用压缩公钥生成的,并且在STEEM/HIVE系统中要加上前缀STM,所以最终得到的STEEM/HIVE可阅读公钥(地址)为:

STM6kcRebtq32xhvWU169smx9W8wRcENWMDMv11mEZNAM8CwxM3r9

校验

使用我们上个帖子中的测试代码,进行测试:

image.png

和我们生成的对比,完全一致。

结论

STEEM/HIVE使用的公钥,生成方法和比特币中公钥的生成没有区别,也有压缩和非压缩两种。

然后STEEM/HIVE中使用gphBase58CheckEncode对其中的压缩公钥进行编码,并加上STM前缀。

相关链接


This page is synchronized from the post: ‘每天进步一点点:STEEM/HIVE公钥(Public Key)生成探索’

移栽鸢尾

image.png

院子里小路旁种植了一排鸢尾,开起花非常漂亮,并且混了和紫色和黄色两种鸢尾,不同的花期,不同的美景。

去年春天,我在院子外的花园边上也移栽了一排鸢尾,可是有一些被路人踩得光秃秃了。

春天又来了,鸢尾都长出来啦,于是我决定再往院外花园路边移栽一些,把秃的地方补上。

工具之一:小铁锹

image.png

准备移栽的鸢尾

image.png

挖出来的鸢尾

image.png

移栽到路边

image.png

浇上水,好多人说这是一只大鳄鱼

image.png

路边的迎春花(还是连翘?)也要开花啦

image.png

特别容易被踩踏的地方,我费了九牛二虎之力埋了一些酒瓶。其实我攒了好多酒瓶,后来发现想把酒瓶埋到路边是一件很艰难的事,就丢掉了大部分。

我埋完酒瓶后,好几个路过的叔叔阿姨表示可以提供给我大量的酒瓶,让我把路边都弄上,可是问题是我缺的不是酒瓶,缺的是帮我埋酒瓶的人啊。


This page is synchronized from the post: ‘移栽鸢尾’

每天进步一点点:STEEM/HIVE私钥(Private Key)生成探索

大家都知道私钥(Private Key)是区块链STEEM/HIVE系统中重要的组成部分,那么你知道私钥是如何生成的吗?我也很是好奇,所以探索了一下。


(图源 :pixabay)

私钥

在探索这个问题之前,我首先回顾一下我以前对比特币系统私钥的探索,在之前的探索中,我获得信息是:

私钥就是一个256位二进制数

并且我有了如下由字符串生成私钥的代码

1
2
3
4
5
>>> import hashlib
>>> from binascii import hexlify, unhexlify
>>> s = hashlib.sha256(bytes('Hello World', 'utf-8')).digest()
>>> print(hexlify(s).decode('ascii'))
a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

私钥的表示方式

好,现在我们有了私钥,不过这个私钥和STEEM/HIVE上常用的私钥一点也不像,这又涉及到私钥的表示方法,关于这点,《Mastering Bitcoin》中有如下描述:

image.png

其中WIF亦即: Wallet Import Format (WIF),简单来讲就是加上前缀(0x80)加上校验码,然后用Base58Check编码

于是对上述私钥进行编码即可得到:

a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
5K5CpQZtUvPqwk2UE1FAiWC1nPV1WYqMnEhMYy2WTiMz3J1u9nm

前边是64位16进制字符串形式,后边是WIF形式,咦,看起来和STEEM/HIVE上的私钥很像了。

STEEM/HIVE中密码和私钥的关系

尽管我得到了一个私钥,但是再确定这个私钥和STEEM/HIVE私钥计算方法一致之前,我是不敢使用的。

至于如何校验,要先说一下STEEM/HIVE中密码和私钥的关系,如果要形容两者关系,我可以用如下两句话总结:

  • 私钥可以独立于密码存在
  • 密码可以用来生成私钥

换句话说,密码类似上述代码中的’Hello World’,我们其实可以用任意密码生成私钥或者直接用随机数。

而在STEEM/HIVE系统中,由密码生成对应的私钥,一般符合如下规则:

随机源 = account + role + password

也就是说,如果我用”HelloWorld”作为密码,那么生成Posting私钥的随机源就是:oflyhighHelloWorldposting

校验

知道上述规则后,我们可以写一个自己的用密码生成私钥的函数,再调用一下steem-python库对应的函数,看看生成的私钥是否一致,就知道二者是否采取相同的规则了。

from steembase.account import PasswordKey
account = 'oflyhigh'
passwd = 'HelloWorld'
pwk = PasswordKey(account, passwd, role='posting')
print("Posting private key:", pwk.get_private())

输出如下:

image.png

亦即私钥为:5JK4yeeivq6j3y4sVwZESJiuBPdi1ZinnePreZ1syeQ9HAMWzBH

使用我自己的代码,测试程序部分内容如下:

account="oflyhigh"
passwd="HelloWorld"
role = "posting"
s = hashlib.sha256(bytes(account+role+passwd, 'utf-8')).digest()
print(base58CheckEncode(0x80, hexlify(s).decode('ascii')))

输出的私钥和之前steem-python是完全一样的:

image.png

结论

STEEM/HIVE使用的私钥,就是加了前缀(0x80)和校验码并用Base58Check编码的256位二进制随机数,和BTC上的私钥没什么大不同。


This page is synchronized from the post: ‘每天进步一点点:STEEM/HIVE私钥(Private Key)生成探索’

升级本地EOS节点到v2.0.4 &看看隔壁EOS都发生了什么

EOSIO v2.0.4版本已经发行了半个多月,我还没有尝一下鲜,今天抽空更新一下试试。

image.png
(图源 :pixabay)

另外,大家最近注意力估计都在STEEM/HIVE了,也来看看隔壁EOS都发生了什么事吧。

升级

编译一如既往地慢,不过好在从不出问题:

image.png

编译完成后照例检查一下版本号:

nodeos --version

返回如下信息,版本号v2.0.4,看来没搞错。

image.png

因为之前已经升级到v2.0.4,所以还是替换nodeos程序即可,一切🆗!

通胀降低 & 销毁EOS

这个我在之前的帖子中写了,EOS的通胀率由5%改成了1%,并且销毁了eosio.saving 内34,106,869.1596个EOS,当时价值近10亿人民币。

更多详情可以看我这个帖子:EOS 上的大事件:通胀降80%,销毁价值10亿的EOS

黑名单之争

关于EOS的黑名单,我也写过一个帖子:山雨欲来风满楼:有EOS BP表示要移除黑名单机制

大意就是EOS NATION节点决定从自己的配置文件中移除黑名单设置,但是因为黑名单需要所有TOP21 BP设置才有效,所以一个BP移除,整个黑名单机制就失效了。

这引起其它BP们的抗议,最终EOS NATION决定暂时不去移除黑名单了。

WPS / 工人提案系统

这个翻译我总觉得怪怪的,简单来讲就是把EOS系统卖短ID以及买卖RAM的手续费,拿出来做一个资金池,然后大家可以去申请资金来搞EOS上的项目。

是不是有点像STEEM上的SPS,不过SPS是直接从通胀中拿10%,WPS则不动通胀的钱。

WPS要分四步部署,现在第一步第二步已经通过了多签,就差执行了。

不过WPS也引发了关于腐败的担忧,BB甚至为此多次发推(大家自己去翻吧。)

eos-vm-jit

EOS 的BP们集体切换到v2.0.4并启用了eos-vm-jit,处理速度和稳定性都大幅增加。

下图是最近三天的EOS节点上合约执行时间:

image.png

可见,随着最后两个BP切换到eos-vm-jit,BP合约执行时间提升了3倍有余。

另外,丢块情况也大幅改善:

image.png

总结

看起来,隔壁的EOS进展极大呢,所以这边也应该加油了。

相关链接


This page is synchronized from the post: ‘升级本地EOS节点到v2.0.4 &看看隔壁EOS都发生了什么’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×