童年作为一个晚熟的男孩,对初中前的记忆都很模糊,尤其是02年之后来了上海这座新城市读初中,一下子把自己的童年都切割了,但是自始至终有一件事情的记忆无比清晰,那就是足球。
小学那会儿还是中国足球氛围最浓的时候,和同学放学后的活动就是在球场上踢球玩,还记得我妈给我报了足球班,中暑了之后仍然说要去,踢球反复蹭破膝盖导致伤口化脓还是要继续踢;作为一个语文渣,甚至一个人在家玩球,还写了小作文——左右脚足球赛上了报纸。
02年韩日世界杯是我有印象的第一届世界杯,中国队第一次进入世界杯决赛圈,所有学校都停课看比赛。后来的事情大家都知道了,本以为只是国足辉煌的开始,没想到已是巅峰。也是那个时候,我有了自己的足球主队——巴西,最终3R组合威风八面,巴西队7战全胜,第五次加冕。毫不夸张的说,当年真的是满城尽是黄衫9号(字面意义上),所有人都被罗纳尔多给征服。时至今日,罗尼也成了我唯一追过的球星。
到上海之后,这边的同学没人踢球,一下子失去了环境,毕竟还在读书,看电视的机会也不多,只能通过买足球周刊、看足球之夜、天下足球来了解比赛,按现在的话来说,慢慢地变成了一个云球迷。其实在02年的时候自己还是小城市里 ...
现代艺术盒子正面
现代艺术的盒子背景是一副比较抽象的画(游戏里的画更为抽象。。。),和简洁的名称,还有就是那大名鼎鼎的设计师——Reiner Knizia,现代艺术也是其拍卖三部曲之一(另外两个是Medici和RA)。
现代艺术的配件
游戏的目的是通过卖画来赚钱,借机炒作,在每一轮结束后按市场价格将买到的画出售给银行,4轮过后拥有现金最多的人获得胜利。
一开始每个人会有一部分的起始资金和手牌,玩家依次进行自己的回合,在自己回合内,他必须打出一张手牌(画)进行拍卖,拍卖的方式按照画上标明的来,有以下4种:
公开叫价:顾名思义,就是大家随便叫,价高者得,和普通拍卖行类似。
一轮价:也很简单,从自己的下家开始,依次出价,可以不出,最后自己也要决定是否出价。
定价:自己定一个价格,从下家开始决定买不买,最后如果轮到自己都没人买的话,你自己必须买下。
暗标价:所有人将筹码捏在手里,一起摊开,价高者得。
此外还有第五种拍卖方式——联合竞拍,玩家可以讲同一颜色的两张牌一起打出,其中一张的拍卖方式就是联合竞拍,具体的拍卖方式按照另一张上面的来(所以另一张不能也是联合竞拍),要注意此时 ...
题记:小朋友的大世界对大人而言可能只是一个小世界,但希望每个大人都可以在这个世界里找到乐趣,和小朋友共同开心。
出生之前他和她刚刚结束蜜月长假,一起开心地制定着未来的世界奇观巡礼计划,仿佛全世界都在脚下。没过多久她怀孕了,在那一刻他还不清楚将要面对的是什么,因为他几乎没有自己小时候的任何记忆,或许迎来一个小生命不会对自己的生活有太大的改变吧,他侥幸地想。
孕期的她没有特别大的反应,每一次孕检都很正常,可能你就是小红书上晒的天使宝宝吧,他们仍然像往常一样可以吃吃喝喝逛逛,顶着大肚子还去旅游,去法喜寺许愿。
然而这个世界并不总是按照他愿意的方式运行,此刻的他还不知道接下来的几天他的世界将发生巨变,活动空间将局限在小小的病房内,不分白天与黑夜。
本来大家一致以为应该延后的产期由于羊水破裂不得不提前送进产房,他在外面焦急地踱步,产房外的丈夫数量从十几个变成几个,最后只剩下他一个。夜已经深了,突然被告知需要转剖,还有点懵的他对于医生之后的话只记住了几个关键词,然后颤颤巍巍签下了自己的名字,小窗的门就合上了,他赶到手术室门外,看着显示屏上那唯一的名字,他试图打开wiki搜索相关信息来平复自己的 ...
很多时候我们在做测试时候,需要对程序的时间或者定时器进行一些操纵,各个语言对于获取时间和定时器的实现都不尽相同,在网上找了一下,发现有一个chaos-mesh的项目里面提供了一个对golang和rust程序注入故障的方案。
要想能针对某个进程进行时间漂移的注入,首先要知道这个进程里面对于获取时间的调用是怎么进行的。对于golang程序而言,当我们调用time.Now()时,实际上是利用了vDSO (virtual dynamic shared object)机制,该机制可以让一些诸如gettimeofday、clock_gettime的系统调用更快,而golang的time.Now()或者golang的定时器实现中维护堆时使用的就是clock_gettime。
知道了调用的函数,接下来就是需要想办法修改掉它,这里chaos-mesh使用的方案是通过ptrace去修改对应进程的内存空间,将clock_gettime的跳转改成一个自己的实现。
chaos-mesh还提供了一个测试程序的封装叫watchmaker,这个程序可以方便我们直接运行,只要直接输入pid和偏移量就可以完成注入。
主要 ...
设想一个场景,我们需要和其他团队配合一起开发,并且不想使用源码构建,也就是说最终希望通过集成对方发布的二进制的方式来完成部署。
那么我们有两种方式可以解决这个问题:
定义进程间api,各自构建进程,通过进程间调用
定义接口,实现者编译成动态库,运行时通过某些机制加载动态库然后再想办法获取到对应的实现的实例
对于c语言来说其实编译成动态库的方式是很自然的,但是golang的话就需要利用plugin机制。
首先我们需要使用go build -buildmode=plugin来将一个包含main包的代码编译成动态链接库。
12p, _ := plugin.Open("plugin_name.so") // open sof, _ := p.Lookup("routerFactory") // 查找符号
注意这里的plugin.Open并不会执行main包,而是仅仅会去调用所有包init函数。
p.Lookup("routerFactory")可以查找到名字为routerFactory的全局变量,我们可以要求实现者以一个固定的全 ...
Know how to solve every problem that has been solved.
What I cannot create I do not understand.
–Richard P. Feynman
上个月因为公司内部的比赛,被迫短时间内了解了一些压缩算法,还动手实现了一些,比如lz77,deflate,bwt,bcm等,不实践不知道,一写代码就发现有些东西你以为你懂了实际上你没懂,加上最近看了已故物理学大师理查德费曼的一系列视频,其中一个细节让我印象深刻,他去世后大家在他办公室的黑板的左上角(这样就可以防止不小心被擦掉)发现他一直保留着上面的两句话。
理查德费曼很小的时候就受到他父亲的教育,明白了知道和理解是两个概念,所以他一直能保持好奇的心态去思考每个问题。这两句话的本质是一样的,也就是——只有自己能做出来才算真正理解了,要做到这一点就需要知道每个问题背后是如何真正被解决的,而不是只知道个结论,所以理解一个概念的最高境界就是你能教会别人这个概念。
有感于此,特撰此文记录一下这段时间研究压缩算法的过程。
首先介绍一个很好的关于压缩算法的综述性网 ...
如果你是新入坑的gopher那么建议一定要看一下Go Programming Patterns这个演讲。本次大会讲框架的比较多,听下来感觉go-zero做的比较完善,也更适合小公司或者个人上手,而且作者比较有激情。然后推荐那个Go编译器的、TiDB遇到的问题的、还有探探的。最水的是一个老外的Go in the Cloud - Why People Choose Go for Cloud Computing。。。
由于大会第二天分了两个会场,所以一个人只能听到部分的演讲,所以我在会场1和2反复横跳,挑着听了一些。比较遗憾的是阿里的那个EDAS的没听到,据说讲的比较好。
大会的PPT可以在这个git仓库找到
现场偶遇了前同事666,一开始带着口罩还没太确认,后来坐下来发微信才确认。
探探 ttdb 探探是本次大会的联合主办方,是一个年轻人社交的app,呃,其实他们的现场的宣传片里面好像还有60多岁的使用者。如果让你设计一个系统,扫描两个人经过的地理位置,从而进行匹配出擦肩而过的人,你会怎么设计? 他们介绍了自己的数据库的一些实践经验:
sql解析上的优化,比如做谓词下推 ...