Home

PySpark自动化测试关注点

Overview 之前一直使用scala写spark pipeline,这次试着使用PySpark来模拟,主要希望熟悉一下Python的自动化测试的文件组织、mock用法、三种verification方法、code Linting,以及docker化prd-code。 文件结构 可以不用跟golang一样与prd-code在同一个目录下。当然也可以这样做。但是单独一个test目录可能会更清晰。 test 我用过的测试部分是unittest和pytest,而在Python3里面,unittest好像有了长足进步,可以灵活配置,可以mock等等,而且是built-in的。 验证 常用的验证是跑ut来confirm,这里使用了三种方式, 常规unit test ...

Read more

北京一周

Overview 上周到北京,应该算是寒冷的一周。 周六早上到,当天还算工作日。当天是Kipchoge的159 plan,在酒店看了他的直播,很厉害。傍晚在旁边吃了。 welcome home, enjoy your fast pass 周日跟alei将三年前未完成的西三环补完。 东三环 西三环 周一到office,开始认识team,开始code,开始这一周。 Mon. Mon. nightfall Tue. Thu. Fri. 周六是雾霾的一天,本来计划是西山半马越野,但是天气不好,白天在酒店和旁边的金源呆了。晚上去屯里的院子里撸柴。 咖啡豆 周日回程...

Read more

kubernetes关注点

Overview kubernetes(k8s),高效解决(kube-scheduler资源调度)容器化应用程序pod-containers在部署、伸缩、高可用(kube-controller)等方面的DevOps问题。 architecture diagram data flow dig into node (not master) Version v1.16.1 组件component 主节点master kube-apiserver把相关的pod和service配置存储到etcd中 kubectl restful API client kube-scheduler ...

Read more

20190929新加坡国际铁人三项

Overview 来坡之后,在yingzhan的提示下,报名了SIT(Singapore International Triathlon)。 首先要了解铁三规则,了解transition等等。之后就是买单车,然后加入当地铁三组织。 之后就是训练, 环过岛, 那天环岛,从宿舍出发,但是到了Marina就爆胎了,之后推车大半小时到24h-迪卡侬,由于修车师傅还没上班,门卫小哥和我一边看YouTu学补胎,一边搞捣起来。 补完胎,继续上路。 跟Meetup的伙伴cycling过western loop,在宿舍附近的Singapore River两项过。 为了练车,从宿舍骑车到Novena Velocity领过物,也骑到过downtown唱k。 当然也...

Read more

scala自动化测试关注点

Overview 想在一个Scala项目里面统一描述下面的内容, sbt scalafmt scalatest scalamock scalabenchmark 还是以之前的golang自动化测试关注点[1]的s3 client例子为出发点,描述一下其在scala下面的test和mock,还有benchmark,顺带将其format也统一起来。 Module sbt 不用每次都reopen项目,只需要restart sbt shell,然后直接运行update就可以。 根据上面截图的配置,当改动了.sbt后,会触发一个让你手动import Changes的tip,然后点击就会更新到最新的sbt。 又或者点击IDEA的右上角的sbt Tab的左上角的Rei...

Read more

golang自动化测试关注点

Overview 在一个软件的生命周期中,测试test是非常重要的一环。 关系到代码质量,稳定性,可维护性。可以让你在代码重构时及时发现错误,以便更加大胆地去尝试重构。 全流程 目前我的整个go测试包括主要有, 编写生产代码 自动生成测试代码(根据生产代码) mock对象,如果测试代码的client很难在线获取到数据,使用mock对象替代之(if necessary) 运行测试代码 go test -v 观察测试指标 accuracy coverage benchmark(performance) 编写生产代码 定义一个st...

Read more

protobuf关注点

Overview 最近有在使用pb,然后记录一下用法, 正常步骤是, 需要先定义一个.proto文件 运行protoc命令,如protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto 之后使用指定目录的.java文件 但是这样会比较麻烦(每次改动.proto,都要运行protoc),而在scala里面,有auto gen的插件(ScalaPB),这样可以免去第2步命令的运行 example sdkprotobuf 结论 tag number最重要 if tag number not change, but field name change, then output w...

Read more

第三次骑行

Overview 今天周六,在床上挣扎了一下,最后还是起来去了sentosa骑行。其实这是一段很简单的路,大概15km,但是中间去买了手套,车胎打了气。导致整段路感觉很长。 今天其实不算很晒,但是太阳还是一直没被遮挡。有人说新加坡的自行车没有路权,个人觉得不然,司机还是很礼让骑手的,当然马路上也印有Ahead Humb,但是骑手要注意转向的变道。 我今天就遭遇了很多次这样的。我在4车道的最左侧直行,然后导航说下一个路口右转,要跨越三条道,在有后方来车的情况下,还是蛮危险的,我就没有控制好,好多回都把自己逼停在左侧的斑马线上,然后等2个交通灯,之后降级为行人,通过斑马线到对面,要等好久,要等好久,怎么解决呢? 熟悉路线,提前摆手示意变道,不要等导航说变,再变,那时候大概率是迟了...

Read more

Git关注点

Overview 记录一下自己常用的一些Git功能 rebase 合并master上的commit git rebase -i HEAD~3,然后从展示的交互页面中选定要取,要留。一般是第一个改为p,其余都改为s(commit log是越新越底) git add .,如果交互没有报错 git rebase --continue git push -f,一般情况会跟origin-master有冲突,所以要force push 提交dev分支前使用rebase,可以把master上的最新commit前插到本次dev的最旧commit stash 暂存一些内容。比如现在在开发feature1,突然有一个...

Read more

Docker关注点

Overview 概念 A container容器 is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another(类似于一个打好的jar包) Docker is a tool designed to make it easier to create, deploy, and run applications by using containers(本身并不是容器,而是创建容器、打包容器、部署容器、运行容器的工具...

Read more

golang关注点

Overview 之前一直是JVM系(Scala, Java)的爱好者,因为GC,因为大数据领域大部分都是JVM系。但是网上关于Golang(go)的讨论好多,天生的并发支持,Google支持,后端服务器利器等,都蛮吸引的,并且go没有C++的那些内存free,即go也是GC的,所以来学习一下 :grin: why go? explained by Grab, Go 的并发模型特别适合打车类业务。打车业务的特点是并发度高,单一任务(一次打车)持续时间长,Goroutine 非常适合编写这类程序,它的机制允许工程师以最自然的思维模式写业务代码 Go 是面向工程的语言。它的很多特性都特别适合大团队使用,比如强制统一的 gofmt 格式标准,避免了一切美学方面的争论。再比如内嵌的...

Read more

Cerebro全栈工作流梳理

Overview Cerebro一直是我觉得比较好用和美观的elasticsearch web admin tool。它是独立部署的,开箱即用,输入es host即可。 囊括了前端UI,后台交互,是一个相对完整的独立应用,有很多实现上的借鉴意义。比如说自己的一个想法,如何实现前端点击->后台交互->入库保存—>返回前端渲染等都可以参考。实在是一个全栈工程师的必备良选。 代码划分 Structure html骨架 先来看看前端的html骨架吧,入口如下, 开始登入connect.htmlloginlocalhost:9000 登入之后,navbar.html,主要分为4个tab(overview, nodes, re...

Read more

建筑与摄影

Overview 今天邮件推送说贝聿铭(Ieoh Ming Pei)去世了。我不记得是从什么时候开始,记住了贝老。可能是他是广州人,可能是我也比较喜欢拍摄建筑。 一直以来自己都很喜欢拍摄静物,无论是自然风光还是建筑,可能对动态的人一直理解不深,不能麻溜地捕捉神态吧。 而说到建筑的拍摄,就绕不过去贝老的很多杰作。虽然我亲身见识过的大概只有巴黎卢浮宫,香港中银大厦,北京香山饭店这三个了,可惜我当时都没有拍下来。 下面列举个人prefer的贝老作品,希望接下来会有机会,静下心来,实地琢磨这些作品,这些光影。 Collection 1989 Paris Musée du Louvre image from Benh LIEU SONG 1997 MIHO MUSEUM ...

Read more

0511周末

Overview 这个周末,想记录一些东西, 巴黎Major 这个周末刚好碰上Paris这个major的决赛,很久没有看dota2的比赛了,上一次还是18年的TI,那时候是OG夺冠,通宵看的。这次是Secret夺冠,没有通宵看了,看完了Liquid对阵EG就睡了。总体来看,这次Secret夺冠一直是高进高出的,始终在胜者组。而TI8的OG在当时更多地是被认为是黑马,因为中路Topson是新加入的。 就像赛后采访zai所说的,不要低估你的对手,认真对待和尊重每一场比赛。回归到代码当中,是否也是如此,认真对待和尊重每一题,每一块代码。 Secret归来依旧是大魔王 MV 周末看了林俊杰的一个MV,可惜没如果,讲述一段三角恋。 一段前奏带你进去,之后开始讲述,其实还是...

Read more

Bitmap压缩算法

Overview 位图bitmap/bitset在大数据领域用途比较广泛(uv去重,布隆过滤等),但是原生的比较耗费空间,下面介绍其压缩方案, 原生位图 在基数明确的情况下,即[0, N],那么就会建立val arr = Array.fill(N+1)(Boolean) // fill应该是Bit,这里有一个int的实现,借用了&=和|=。 所以若要判断N是否存在,那么就看arr(N-1)是否为1(默认0是不存在,1是存在,这里只能判断有无,不能判断有多少)。 缺点:arr的内存占用只跟N有关联,所以如果是稠密的话,还算有价值;极端情况是基数只有1个(即一个很大的N),那么arr(i)=1只在N-1处,其他的arr(i)都是0,导致很多空余,浪费内存。 e.g., N=...

Read more