py全景图生成器开发感想

说点背景:由于厂里有时候要做些PPT,喜欢把一件事涉及到的各种元素揉在一起放个图,那天我看到一个同事,做了一张很大的图,我问他这样的图有没有模板可以自动生成,回答没有,是一个个拖的。这时我就想做一个自动生成类似全景图的内容,也算是在平时做做toy project练练手。

项目地址:

https://github.com/nisiyu/overviewPictureBuilder

先上个示例图,当然了,觉得丑的话很正常,目前起码实现了自动排版的方法:

output主要还是说说几点感受:

1. 评价一下现在做的成果,跑起来了,但是比较粗糙,还是有很多可以优化的地方。现在我设计的一套格式如果想改变样式会非常麻烦,还要进python脚本修改函数的参数。而且在程序编写时发现与一开始想的会有出入,就临时推倒了一开始的想法。于是该功能的定位和思路就变得很奇怪。而且因为只有自己写,想改就改,随心所欲,在真实项目环境中应该是大忌。

2. 感觉如果遇到问题用中文进行搜索的话,会很难搜索到想要的答案。可能是百度的锅,也有可能找答案的方式和输入的语句不专业,比如我形容一个页面的XXX动作,外行跟内行描述的语汇会不一样,专业的语汇更有可能找到哦专业的答案。在这个项目中我是用了PIL模块,因为要自动排版,我需要在绘制字之前计算字的高度和宽度,但是搜相关关键字加“宽度 高度”这类都很难搜到,最后还是求助了官方文档,有一个textsize的API。同时源代码中也有相应的API。

3. 熟练化一些Python语法特性,List Generation 是一个比较具有python特点的内容。

当我想要进行一个多维序列的一个初始化,我一开始运行了第一行的代码,发现无法正常运行,发现乘法符号只是浅拷贝[[]]中[]元素,相当于把引用复制了3次,放在序列list1中,后来改用了List Generation的方式,感觉其实和之前介绍的map函数的作用比较相似,每次都生成一个全新的空序列,而且如果[] for i in range(3)是由圆括号包裹的,则是一个generator,不会立即求值,而会在迭代过程中求值,和序列有所不同。
[code lang=”python”]
# list1 is shallow copy if I changed list1[0], list[1] list[2]will always change
list1 = [[]]*3
list2 = [[] for i in range(3)]
list1[0].append(1)
list2[0].append(1)
print ‘list1’, list1
print ‘list2’, list2

# the following is print result
list1 [[1], [1], [1]]
list2 [[1], [], []]

# the following is a generator
generator = ([] for i in range(3))

[/code]

个人理解这里也是给程序员一种快捷的编写方式能够更加便利地通过一个序列生成另外一个序列,不过它也有不是一一对应的,和map函数有所不同,序列生成可以增加条件,如下代码就计算了0-9序列中序列中元素的平方小于50的序列,就将原来的序列的部分映射出来了。

[code lang=”python”]
# list generation with condition
print [i for i in range(10) if i*i < 50]

[0, 1, 2, 3, 4, 5, 6, 7]
[/code]

打一针鸡血,我继续装逼去了。

提升自己的道路也正在不断进行,与工作时间互相切换,感到有点疲倦。要完成转型的话,留给我的时间并不多了。。。

前些天在豆瓣阅读上看了两本小电子书,《程序员跳槽指南》和《谈谈全栈工程师》,篇幅不长,像是程序员的杂文集,都给人说了一下互联网程序员的一些技术路线,如何打造自己个人的品牌,如何提升自己,选择职业,感觉还是有些受益的。

总的来说,还是需要多与人交流合作,如在开源项目中贡献自己的一份力,是一项非常关键的能力,提到开源项目,有一句话我非常欣赏:“如果因为自己代码差就不开源,这是说不过去的。”。如果真能接收到有意义的骂或吐槽,那对我的代码也是很有意义的,而且我也会更想去提升这代码的质量。

挖掘一下自己的能力,感觉确实没有很亮眼的地方,写了写简历,发现也是一个技能罗列,并没有说出什么特殊的部分,无力感还是很强的。所以很需要搞些能装装逼的东西~搞搞搞。

看了《谈谈全栈工程师》这篇文章后,觉得很必要将博客转到GitHub Pages上,进一步提升自己的逼格。这里主要写点看书心得,发发牢骚之类的,如果可以的话会部署个人作品。技术类的还是希望能够搞到GitHub Pages上。

不管怎么样,还是先开始水吧

最近又是一股对现在生活的极度厌倦和对别的生活的向往,感觉自己入错了行,感觉之前太安于现状。

偶尔对一个同事说起过觉得自己实力太差一定要提高,然后对方却一股劲地鄙视技术道路,给我泼冷水说前路没有希望,不会到很高的位置,而且有太多的人比我牛。确实让我心凉了一截,对,他说的没错,我要是很牛的话,我也不会落到现在这个地步。但人也不是为了爬到顶点而存活着的,我想要走技术线,是因为享受其中的有趣。

今年要不要订个计划呢?我往回翻了翻刚开这个博客时的列表,然后笑了。。。

先不要定宏伟的目标吧,无论怎样,我就坚持经常写日记,以两三天的频率开始水,说不定哪一天回头看时就熬成了一碗汤。

吹吹逼,最近看一本《沟通的艺术》,里面有一个章节提到知觉验核,具体的话我就不用社科书上文绉绉的翻译腔来复述了。主要是说不要武断地判断别人的真实想法,要想知道,还是需要问对方。

书中就提及如何优雅地问对方,看完以后我感到很有趣,想起我平时有很多武断判断“她喜欢我”的故事,可以跟平时我遇上的“她喜欢我”的故事联系起来。

“首先描述观察到的现象”——“我发现你刚刚在看我”

“提出你对这个现象的两个假设”——“我觉得你可能是喜欢我也有可能是发呆”

“然后说明你很想知道对方是怎么想的”——“所以你到底喜不喜欢我”

我的这个例子举得有点歪,哈哈。

不过这里还是感觉到了沟通的一些智慧在里面,关键是提出两个对于对方行为和现象的假设。既能够表现出自己的疑惑,也能够表示出自己认真思考过可能的原因,也能够降低对方的防备心理。可能对方在想“你既然都能差不多猜中了那就告诉你吧”,如果在疑问时把填空题变为一个选择题,可能在生活中的沟通还是很实用的。

 

开坑预告

最近在单位时疯狂摸鱼,玩了点代码分析的内容,看了一门技术叫符号执行,接触到了LLVM和klee工具觉得有点意思,虽然对原理我说不出个所以然来,但是工具确实很厉害。也不枉费我花了1-2天时间才部署好。。。(当然也是因为遇到了几个坑)有机会的话,我会在家里也做做实验,来分享一下大家关于符号执行的奥秘。

另外,我厂是个胶片汇报公司哈哈哈,我上次想到个idea,准备做一个自动生成xxx全景图的框架,这样的图片在我厂的胶片中非常普遍,关于算法之前想了些,主要还是需要熟悉熟悉一些出图的API,写出来的话也会秀秀。

还有,想起买的Leap Motion和Rhaspberry Pi都没玩过,有点想做个手势控制的收音机?好吧,这个项目肯定会鸽,不用抱什么希望。

关于博客,感觉自己还是要经常写,最近在公司内网把我几个写的小项目加上了markdown,觉得博客还是用markdown写比较好,计划找找插件更新一下吧。