Ubuntu 18.04 必做操作

新开一个栏目,专门记录开发中常见的命令和操作

新装完Ubuntu Server之后要做几个操作,才能让他更好用:

  1. 更新软件源
  2. 安装必备软件
  3. 设置系统代理

Ringbuffer环形缓冲区

前言

环形缓冲区是很常用的数据结构,用途很广泛。我目前遇到的使用场景就是TCP分片转回TCP流,一个线程读取TCP分片拆包,写入缓存区,另一个线程从缓存区中读取,互相不影响。

为此Google了一番,发现了kfifo这个Linux内核的实现,十分精妙。

原理

基本原理

struct kfifo {   
    unsigned char *buffer;    /* the buffer holding the data */   
    unsigned int size;    /* the size of the allocated buffer */   
    unsigned int in;    /* data is added at offset (in % size) */   
    unsigned int out;    /* data is extracted from off. (out % size) */   
    spinlock_t *lock;    /* protects concurrent modifications */   
};

先看一下基本定义,buffer是数据缓存区,size是缓存区长度,in/out是输入输出指针位置(%size后就是真实指针了)。

size需要检测是否为2的次幂,不是的话需要升到2的次幂。方便后续计算。(可以看内核的roundup_pow_of_two实现)

in、out每次操作都+对应的读写长度,通过取模运算回落size区间。

data := kfifo.buffer[kfifo.out % kfifo.size:kfifo.in % kfifo.size]

data就是有效数据的缓存区区间。

快速取模

kfifo使用了二进制的位运算实现了2的幂取模运算,并且利用了无符号数的溢出做回绕。很精妙的设计。

首先,缓存区尺寸要取整为2的幂次,这样可以利用位运算进行取模。

M mod N = M & (N-1),当N为2的幂次时有效。

取模运算对于计算机来说运算速度也是很慢的(虽然你感觉不出来),而位运算就是分分钟的事了。

回绕

无符号数溢出后,就会变成0从头开始,借助这个特性可以绕开逻辑判断。

宏碁TMB117测评

2018-07-17夜 深圳 狂风暴雨配闪电

前言

买了个摸鱼用的笔记本,宏碁TravelMate B117,使用体验还挺好。

我的需求很简单:

  1. 能运行Manjaro
  2. 电池耐用
  3. 尺寸小
  4. 便宜

选来选去就选到了这个笔记本。基本配置是这样的:

  • Intel 奔腾 N3710 处理器
  • 4GB 内存 / 128GB 闪存
  • 11.6英寸1366*768屏幕

最重要的是:这个本子我买的时候特价只要2399,现在2499也不是很贵。

京东购买页

逃离北京,移居深圳

很早之前就应该写这篇文章了,毕竟已经来这边两个多月了,是时候总结一下这次的北京大逃离了。

(长篇唠唠叨叨流水账预警)

引子

刚毕业的时候有两个选择,北京or深圳。家里建议我选择北京,毕竟离家近,都是北方生活可以很好的习惯。最主要的是冬天有暖气,回家还方便。再加上之前去过一次北京稍稍有点认识地方,毕业就去了北京找工作。具体找工作怎么经历按下不提,最后在16年9月份在北京站住脚了。隔了几个月,因为之前经历了城中村,加上老板给涨了一下薪水,觉得应该提高一下居住水平,我就和同事搬到了五环边上的清河地区一起合租。房租从之前的单间1000每月涨到2500一个次卧。

经历了北京的低端人口大清理,我在清河地区的房子再续租已经从5200一个月涨到了6800一个月,再加上糟糕的天气和公司里的各种斗争搞事,我觉得不应该在这样下去了。所以2018过年期间下了决心,必须走。(压垮我的最后一根稻草应该是涨薪的时候只给涨了900块钱,和糊弄人没什么区别,本来基数就少,涨一次抠抠搜搜连房租涨幅都追不上)

离职

要离职肯定要提前申请,折腾快一个月的交接。三个人分别接收了我不同领域的任务,然后开了离职证明。(有个小插曲:离职证明网上下载的模板,领导给盖完公章说我应该没事看看文化方面的知识,全因为离职证明的那段话没空两格? 拜托那是百度搜到的模板诶,不知道老板讨这个嘴上面子有什么意思,可能是小孩子脾气?)

因为是裸辞,拿着我的所有东西离开的时候还是蛮爽的。开开心心的走出办公楼坐上回家的公交。就这么在家颓废了一个月。当然,到了出信用卡账单的时候就很方,要交最后一次房租,要还一个月放纵的生活费,也是一笔超大的开支。毕竟每个月都是动态平衡,虽然攒不下钱但不至于负债。没了工作只能用之前的存款生抗,也是没办法。

启程

定下要走了,收拾了一大堆东西,能拿走的都拿走了。拿不走的一部分送给室友一部分拜托室友等有地址了帮忙邮到广东。去深圳有好多种方法,我和家里人一起去他们帮我拿着大量的行李,肯定不能坐飞机也不能坐高铁,毕竟没有这么大的储物空间。最后买了北京西到深圳的硬卧,在车上折腾了一天一夜。硬卧车可以放很多行李,至少我的两只行李箱两只双肩背和两袋子锅碗瓢盆都能装得下。(不要考虑动卧,动卧只有床底下能放少量扁的行李,亲身体会。)

区块链是什么,我来告诉你

区块链是什么

区块链,当今最火热的技术热点。为什么这么火呢,三个字:“比特币”。

首先,我们要知道区块链是什么,根据维基百科的描述来看,是这样的:

区块链(英语:blockchain 或 block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网。

用简单的话来说,区块链就是一个全球一起写的一本书。这本书有可能是账本,也可能是别的什么东西。

区块链有以下几个优势:

  1. 不可修改,数据写进区块就不能更改了。
  2. 单向性,你只能在最后一个块后面加新的块,而不能在之前区块中间加新块。
  3. 众生平等,任何人只要有合适的客户端就可以入网,根本没有限制。谁能出新块完全取决于共识算法。
  4. 去中心化,每个人都是客户端,每个人也都是服务端,每个人都拿着所有人的账本,所以这是完全的去中心化。

区块链的去中心化是真正的去中心化,没有管理员,唯一一种有效的攻击手段就是拿到51%以上的算力,这在现在这么多人参与的情况下几乎是不可能的。而且,这种攻击仅仅能拿来控制新出块的内容,并不能改动之前的老块。