全部文章 | 第2页

【c++11、webrtc、stl】利用stl“就地构造”提高代码性能

最近在看webrtc的trunk上最新的代码,今天无意间留意到了stl容器中的“std::vector<T>::emplace_back”。事实上在接触webrtc之初我就经常能看到这个方法的使用,只不过那时候的对webrtc完全不了解,所焦点都在webrtc是个什么东西上。

 

后来查stl官方文档,看到的解释为:

构造并插入元素

同时网站上也给出了列子,但并不是很明确。看vs2015中对该函数的实现,实在看不懂(因为和push_back的一个分支实现很非常相似)。google看到这个函数代表在vector内部进行构造并放到数组里。

这样做的好处在于不需要去特意写移动构造函数,也不需要进行任何移动操作。间接的加快了性能。

 

 

 

ps:由于网上的说法存在问题,所这里要明确更正一下。

emplace_backpush_back两个函数都是通过“布局new”的方式将元素对象的内存放到自己的中(并非栈中)。

 

 

【个人感触】为了自己身体或许应该共同抵制“富士康”式的IT企业

  • 何为“富士康”类型的IT企业?
  1. 起薪低,靠加班工资拉高收入。
  2. 起薪似乎很高,但时薪低。
  • 先说说我的工作经历:

第一份工作在人力外包公司,被外派给睡地铺的传统行业的通讯商。加班很多,用现在的话来说,那就是9/10/6。起薪不高,晚上加班不给钱,但可以报销打车费,周末加班给一倍工资,五险一金按照最低交。一待就是2年半,后来离职。离职之处没啥感觉,办完交接手续后,休息的第三天开始,发现后被僵硬疼痛,整个人重感冒半个月,无法进食或进食困难(一吃东西就恶心),开始出现低血糖之类并发症;卧床近一个月,期间脸发黄但没有黄疸(排除肝炎)。身体体重减少10kg,医院只检查背,结论是劲膜炎。

当然可怕的还不只这些,还有毕业时体重只有76kg(168cm的高),在该企业时最重有100kg,离职时有82kg。可见亚健康多严重。当时我选择去这里,那是因为当时通讯还是很火热的一个行业。觉得就算做个外包也自豪。

第二份工作是一家创业板上市公司,选择去他们公司,主要是因为主观认为上市公司的经营应该很平稳了,并且也受够了人口规模大的公司的政治文化。这家公司的好处就是不加班,但是混日子的人多,斗争也很厉害,没多久我就离开了这个乌烟瘴气的地方。

第三份工作,相当于内部创业型公司,公司本身也没有什么制度,但缺点是离家远,上下班路程大约是2-3个小时。随着后续老板的小心眼和各种乱七八糟的问题,在这家公司又再次体会到了身心同时疲惫的情况,加班+各种斗争。由于需要背负着一些责任,但是又没有实权,导致整个人压力巨大。身体体重狂飙,休息时间被各种占用,情绪不稳定等。后来受不了,换工作!

第四份,也就是现在的这份加班不常见,离家近(10km以内),公交直达,也可以走路(路基本是笔直的),不需要面对太多压力。下决心要减肥,然后骑车上下班,接着把手摔骨折。打着石膏上班,公司也没有为难我,打石膏期间公交上下班弄控制碳水化合物摄取量。截止到今天用体脂称测量的结果显示,基础新陈代谢逐步恢复并接近正常水平,体制率有少许反弹但总体微幅下降,肌肉率总体微幅上升,水份微幅上升,内脏脂肪从20到18了,睡眠进入正常循环,情绪恢复正常。

  • 今天反省我自己:

看来工作的压力和节奏还是会影响到我们的身体变化,甚至影响到情绪,让我们变成不是那么友好的人。其实对于一些企业主来说,他们稍微放慢脚步自己不一定会死,而且还能让更多的企业一起进来分蛋糕,正因为人太贪了!

写到这里,我已经不知道怎么写下去了,因为说人贪就要说人的七宗罪。其中有一项就是傲慢,话如果说的不够”恰当“要么可能会被拥护者们喷,要么又显得苍白无力。

所以我得到的结论是,为了自己的身体,为了让自己能多活一点,或许我们该抵制”富士康“式的企业。同时也不要随意把任何一家企业”神化“,因为企业又不是属于你的。

 

【我也不想本末倒置系列】离家十多年

  • 为何我要写这篇博文?

可能是因为年纪的因素,有可能是无病呻吟,更有可能是我想去改变或者我无法改变的事和人。刚好现在有一只手骨折可以“闲”下来考虑一些事情。我走过的一些路以及当时的一些心态,似乎可以用几首歌来表达。所以每一个时期的描述,我都会带上一首歌。

另外,若你不知道我博客地址又能看到这篇博文,那么你可能是幸运的,也可能是不幸的,因为我是一个有选择性分享想法的人。

 

  • 简单说说我和我的博客!

简短介绍一下我,老家在云南一个小城市的,IT行业;我自己文笔并不好,但这个博客我坚持写了大约8年。一方面用来做我工作上一些技术的笔记,另一方面作为我定期回头看一看之前的一些经历,在心理学上算是一种思维整理和自我认知强化的过程。

我为什么会写这篇博文,因为通过这次摔伤和结合今年回家过年的情况,我觉得有必要写出来了,可能说一说我自己的一些理解会对他人有抛砖引玉的作用。接下来我会按照我不同的观念期进行描述我对同一件事情的不同看法。

 

1、烦躁、焦躁,想离开家出去看看(想飞 – 任贤齐)

从懂事开始,我就知道一件事,我和哥哥相比,我是相对受到溺爱的人。小时候我除了穿我哥的衣服外,我还会有很多新衣服,而我哥新衣服并不一定会比我多。小时候我很壮实,而我哥看上去还好,但是似乎身子比我单薄多了。在我是一个很调皮的人,也常常被邻居的小孩欺负,也常常被幼儿园和学校小朋友欺负,基本打不还手,骂不还口的人。

老妈在我身上寄托的抱负有点多,五年级的时候由于学习注意力不集中与遇到让我感到满脑疑问的老师,致使中学升学考试一塌糊涂,靠借读费进了重点初中。由于巧合,到了最复杂的一个班级,第一次发现原来除了学习世上还有很多其他的东西。

初中由于各种复杂的原因,以及自身各方面的原因,成绩一直不理想。老师们总是喜欢虚荣的国度宣扬那些学习成绩好的同学,以及不管回到家还是去外婆家吃饭总是被作为典型说教,以及|恐吓式“吓唬导致很烦;当时电脑游戏正在逐渐流行起来,心思也渐渐不再学习上了。

刚好我读初中的时候,我哥考上了重点大学,读书去了;一次偶然的机会听说到他的前几届有人在外面读大学,然后留在外面,日子各种好过,各种体面和虚荣。那是我开始留意了读大学这件事,但念头归念头并未成为实际行动,一转眼到了考高中,考试结果不言而喻!去了职高读了半年,被职高的混混欺负,然后用200电话卡和老妈在电话里谈了一个上午,最后决定转学到重点高中。

到了高中,我的学习成绩并没有我当时头脑发热想象的那样,现实给了我一重击:全班倒数前十。

起初我并不以为然,只是觉得有些丢脸,因为这所高中和我当时读的初中是同一家,因此有很多熟悉的面孔(老师和同学)。而我作为一个职高生转入的消息很快被几个好事又喜欢攀比的同学传开了。渐渐的,我就逐渐成为“熟人”眼中的反面教材,当时心中也很不是滋味,但并未作出太多的实际行动。因为初中和高中的时候,化学和生物是我相对感兴趣也还算能学的进去的两门课。

在一次晚自习的时候,化学老师和我的一次谈话,我决定似乎要拿出一些实际行动了。从化学、生物入手,我将成绩逐渐提高到及格和更高的分,接着再从数学物理等其他科入手,高中三年级,成绩不仅在提升而且还出现了反超部分人的情况。

转眼要进入高三了,高考也即将迎来,偶然的一次机会看到了我同学那借来的一本学生杂志(读物),有次我妈在收拾我的书包时看到这本我忘记归还的书,然后顺手就帮我订阅了一年的期刊。每个月总是有所期盼,盼着期刊的到来。期刊里面偶尔会说一些解题技巧和方法外,多数会提及一些已经在读大学和大学毕业参加工作人的轨迹。时不时的还会有一些成功学的鸡汤文在里面。

通过这本杂志,我越看越想“走出去”看看,非常想脱离这个枯燥和烦恼的环境,也想过上光鲜亮丽的生活;然后就到了高考。

那时候我们是先考试,再填支援。考完之后,我对自己的考分多少有一些数,所以报考的院校就划分在了二本和一专两个范畴。当时家里希望我留在云南,但由于受够了各种烦恼,所以我把支援目录手册周哦你和云南、经济落后地区的大学全部剪下来烧了,留下了沿海省份和发展较好的内陆地区。

在和家里博弈的过程中,一方面坚定了意志,另一方面也做了部分让步。巧合的是第一志愿就被录取,接下来就开始了杭州和大学的生活。

2、社会这个染缸(为自己骄傲 – 任贤齐)

进入大学以后,由于之前太烦家里唠叨,所以和家里做了协商。生活费每月500(2006年读大学),加之学校里的富家子弟也不少(发达地区的人收入较高,子女生活费普遍在1000或者更多)。所以一直过着穷学生的生活,当时心中一心想着如何进入社会赚大钱之类,在大学即将毕业的时候,还是犹豫了一下要不要考研,但最后还是无奈放弃了。

刚步入社会,成为社会廉价劳动力的我们(当时应届生工资在2000-5000,一般多数在3000左右。)

当时感觉各种自豪啊,大学本科毕业生(其实是实习阶段),还能养活自己,各种对生活的美好和向往接踵而至;但好景不常,很快就开始体会到了社会的复杂,工作上同事之间的各种勾心斗角;遇到事情各种的推脱和指责。加上工厂性质的文化渲染,让人很是烦恼和头疼。

当时心想:“不想在这个鬼地方呆多久”。所以转眼间就换了工作,新单位和之前的公司性质差别不大,但唯一的好处就是这家公司人口规模稍大一些,看似相对正规,各种制度和福利也相对健全。由于是刚刚换的工作,而且工资有了提升,环境相比之前好些,所以那一股自豪感又自然而然的冒了出来。随着时间的推移,同事之间的明争暗斗也在逐渐凸显出来,不过比起上一家公司来说的话,已经好不少了。

但由于工资上调无望,加之加班多的受不了,转而又换了一个工作,这次的工作工资有了小幅上调,但由于内部斗争过于激烈没有待太长就走了。

转而又换了一个工作,这个工作待的是最久的,也是最为矛盾的(在换工作的问题上),但最终由于老板的后宫式经营和部分勾心斗角,我选择了离开。现如今回过头去看,如果没有那么多的屁事,以及老板的心胸狭隘,其实可能大家会好很多。

现在刚到的公司,由于时间还比较短,暂时不做任何评价。

可以看到,进入社会以后,首先遇到的问题就欲望。一个人对金钱的欲望,对名利的欲望,以及对地位的欲望。人的大部分时间也耗在这些地方,我的几次换工作也是因为他人的斗争而误伤,以及我对钱的欲望,想要快速证明自己。

这么几年下来学会了不少鉴别人和矛盾的方式方法,但我也失去了当初的那份纯粹的心态;现在更多考虑的是如何维护好现有社会属性。当初觉得美好的事情(社会),现在看来那只是围城而已。

 

3、每次过年回家,同样的地方不同的画面(老地方 – 任贤齐、停止吧时间 – 姚光庭)

每年过年我都会回老家过年,随着这几年收入见长,以及家里的事情越来越多,我回家的次数也在增多。

过年回家,我都是采取最佳省的方式,即综合路费也要综合路程时间。就这样坚持了这么多年,到后来由于一些因素,我听到了家里人逐渐有反对我家过年的想法。

站在我的脚去看,这种反对大致分为几种:报复心理、觉得我傻、觉得我多事、其他。

报复心理,由于父辈们关系过于复杂,也过于简单。不让我回家过年的原因并非让我远离矛盾,最终还是想通过我不回家过年的行动让另一方得到一些教训而已。

觉得我傻,因为每次回家我都按照最佳省的方式,所以就会坐一些半夜的飞机,或者飞机转火车什么的。他们觉得过年回家一次就这么几天,还这么省会很累的。

觉得我多事,主要还是无意或有意的、被迫或主动的设计到了父辈们的矛盾来,导致矛盾多方有话柄可讲,有话柄可说。

其他,这个没必要多说。

我想说,正是因为小时候对家里环境的烦恼,以及读大学之后家里父辈们的层层矛盾,让我对老家时不时的产生了心理恐惧和阴影,这也是我不愿意回老家的主要原因之一。现在大家都闹过去一阵子了,相对安静下来之后,我又觉得可惜。因为现在我需要随波逐流,努力维护好我的社会属性,如果再有所变动可能会体无完肤。

是什么时候我开始认识到每年都要过年回家?是有一次我在杭州过年,以及一次回家过年不经意的看到外公外婆的变化时,我才明白回家过年的重要性。有一次和外婆打电话的时候,阿姨接过电话来和我讲电话,大意是:“你过年回来看一看吧,你外婆越来越矮了”。于是当年回家过年回家的时候,我就特别留意了一下外公和外婆,又留意了老爸老妈。

每一次回家过年,走进的是同一道门,但围在一起吃饭的人在发生变化着。小时候,外婆的兄弟姊妹们,还有父辈们,还有我们小辈们,我坐在一个并不是非常宽敞(60平米)的家里吃饭,后来外婆搬了大一点的家,还是同样的人围在一个更大的地方吃饭,那时候挤的我们小屁孩们只能坐在大门外的石头上吃饭。同样,我们几个大家子都会互相串门(去舅公,舅婆家吃饭一样)。

现在大家的物质条件在渐渐转好,但同样的一个客厅由于不需要考虑很多人作者吃饭的问题,正在被沙发盆栽填充着。过年的时候大家同围坐在餐桌前,似乎吃的都很香;但试试上缺少了家的味道!年迈的不是不能远距离活动就是要照顾子孙辈,或者还被一些矛盾和琐事困扰着。年轻一些的人,不是因为任性,就是由于某些借口而缺席。大家坐在一起吃饭,聊的不再是哪里买的菜好吃,如何做才的问题;而是尴尬的气氛或者把社会上的属性带到家里来。“聚”成了空话和形式,互相躲着成了事实。

我看到的长辈

外公精神面貌大不如以前,有时就连喘口气都需要很大的力气,眼神不再像以前有神,给人一副茫然不知所措的样子。

外婆的身子越发佝偻,外婆年轻时候有些发福,但近几年缀皮在逐渐增多(体重下降)。

老爸,头发白的更透,似乎快透明。小老头的样子日益凸显。

老妈,比前几年更老了。

舅舅,白头发也在增多,精神面貌大不如以前照片上的那个年轻

舅妈,通过外表就能看出年纪的变化

阿姨,给人浮肿的感觉

叔叔,见得不多,只是身子比以前单薄多了

随着时间的推移,衰老越快的人,变化越大,衰老稍慢的人变化稍少一些。

有一次,一个偶然的机会,看了一部台湾的电影《亲爱的奶奶》。才真正的意识到什么叫做见一面就少一面的意思。所以,过年回家成了雷打不动,不管有多大阻力都要回家的一个必须行动。

 

4、(阿公 – 阿牛)

去年外公去世,我既不意外也非常意外。

意外的是,太突然,过年的时候才见面的。

不意外的是:

早在几次以前回家的时候,我就看出了外公病情的恶化。

在前几年,我实在不敢和其他长辈说太多我的一些看法,只能找我老爸说我的想法:

子女不合,最后倒霉的父辈。因为子女们有收入,父辈们还在习惯性的会或多或少的考虑子女的事情。所以最后大家反而会忽视了父母。

父母一生只有一次,那些矛盾的焦点无非只是一些口舌最多就是一张购物卡的价值,没了可以再挣码单父母没了能换吗?

还是尽量劝劝我妈,退一步不要太过于认真,一家人又不是外人!再说只要是身陷家庭矛盾的漩涡里,要说是谁的错其实很难,因为大家或多或少都会有点问题。

随着近几年我工作忙起来,家里的脑顿我很少了解,家里也习惯性的让回避,所以很事情不得而知。

就在去年的时候,我妈突然说要来杭州,我感到非常困惑。说的非常急迫,而且价值哇噢宫身体不好,理应不该来杭州的,但考虑到外公身体可能有些新状况,她可能又因为这个事情和她的兄弟姐妹们闹矛盾了,所以处于环节矛盾的想法,帮他买机票来杭州。事实上我当时就很想问是什么情况,但由于工作上很忙,以及部分奇葩同事和他们项目上搅和到一起,烦恼不堪。所以就忘记了这个事情。

直到某一个周六,加班路上开这车看到舅舅打电话过来。停好车后会拨回去,听到的是舅舅哭着和我说外公不在了。起初因为他哭着我没听清,好几遍之后,我才听明白。当天上午订好我自己回老家的机票,接着就和老爸老妈说了这个事情。

晚上回家后,老爸老妈神色慌张,我就劝他们回家一趟,花了些口舌才把他们的情绪稳定下来,然后就回家了。

很可惜的是,回家的这段时间里,还是有着部分奇葩同事没有放过我(其中还有少部分人知道是因为我外公去世回家的)。所以这些人也被我牢牢记住了,实在没有办法,这事不能轻易的算了,你说呢?

 

5、欲望不止,对谁都一样!(30++ – 阿牛)

在维护社会属性的同时,渐渐的也有了部分积累。有时候就有了选择困难,刚踏入社会时,我需要赶快养活自己,心怀理想要干一番事业,随着对社会的认识增加之后,明白了什么样的难度是可以到达,什么样的难度只是徒劳而已。

俗话说:人为财死,鸟为食亡。

没错,人就在本能与欲望之间分不清楚,生存是本能,欲望是本能与思维演化出来附属品。曾经觉得高高在上的事物,当能够达到时,有时人就会失去了兴趣。同时在这个过程中,也会对个人的认知能力有所提高。因此渐渐的考虑问题就会趋于复杂,更多会去考虑事情的多个面。面临选择时就会存在舍和得,如果舍的部分并不是很重要时,自然不会形成选择困难;怕就怕“舍”的是重要的东西。

现在应该处于一个尴尬的,迷茫期。

 

6、父辈们!(还有我 – 任贤齐)

人之所以可怜,不是因为自己不思进取,而在努力挣扎时没有援手身处。人之所以可恨,那是因为当明确指出有问题的时候还是稍作收敛或尝试正面去理解。人所以可怜又可恨,那是当又援手伸出时,自己不做客观的去理解和分辨,过于主观、固执、思想不是正想和积极的,久而久之援手逐渐离去以后,遇到困难时自己又在挣扎;当周围的人想伸出援手之时,介于过去的经验均收手不伸。

人人都会老,人人就会要到需要人照顾的时候。人的关系就如有一张蜘蛛网一样,每个人在这个网中属于某一个“节”,联系和维护着周围人的关系。如果某一个“节”没了,那有可能会发生关系网的变化。

正如之前提到的,子女不合苦的是父辈。因为子女小时候,父辈是家庭这张大网的主要两个“节”,随着子女成年,具备一定的行为和思维能力后,子女在这张网中“节”的作用会日益凸显,随着父辈活动空间的缩小,他们这两个“节”的功能会逐渐退化致仅仅是一种微妙的“粘连”的关系。如果子女之间的矛盾不断,甚至更大,会引发整张网关系混乱或者断裂;这事父母就能会增加活动,想通过自己的行动把整张网拼会原来的样子。但往往事与愿违,因为父母中对这张网的印象还停留在大家小时候,而子女成年之后,“节”的主力部分在发生了变化。

所以遇到这类问题的时候,要想让整张网回复正常,只有新主力”节”来构建新的连接,这才是最自然和正常的。

可惜的是,嘴上说说容易,做起来很难。首先每个人的认知水平和自我认知水平不一致(情商),每个人的诉求,树造的性格不同,所以要做到一直很难;在这种情况下势必需要一个组织者,但对于中国人来说,组织、控制、领导等词语被理解(解释)成了虚荣和面子,所以如果要选举一个组织或者领导者的话,这又会成为一个矛盾的焦点。

那要想恢复这张网到底是不是伪命题?不是,其实很简单也很难!对待家人时:

少将一些社会属性带进来,例、猜忌,勾心斗角,过于讲究原则,利益争夺。和我哥相处时,我偶然的实践了“难得糊涂”,在部分和钱、利益有关的事情上采取糊涂账的方式过去有,当然其实大致估计一下,最总还是我得便宜;但这也不要忘记,不是因为接着继续占便宜,而是在有能力之时如何让对方占一把一模一样的便宜。

这就是除了烟以外,吃的方面我买我自己的东西我势必会带上他的;对于穿的,我会让他自己看然后再买给他。油卡我充好丢在那,谁要谁去加油,没钱我再继续冲,他的保养车子,我开去做比他更贵的保养一样;吃一点小亏会换来更和睦关系。同样就像我最近骨折,他直接请假一周在家(当然也有他有点懒)。

如果不尝试换位思考,就没有换位思考的习惯。每天都是认为:“我的好就行了,我过的简单快就好了”。虽然你每天过得很好,但你说出这句话的时候,你假设的前提是明天也会像今天一样好。但如果在一张破碎的家庭关系网里,当你到你父辈那个年纪时,你会怎样?

因为我们小辈的环境是你们给的,你们教会的,我们模仿你们似乎也没错吧?

不过至少趁我们还年轻,似乎一切都来得及,最不济因为还有我们。

 

7、(外婆桥 – 任贤齐)

不知道从何时开始,我就一直在找各种反面教材。成功的例子并不能给人多少有用的经验,往往是那些失败的经验能够让人少走湾路。

我一直强调:用进废退。

我只是觉得年轻时候多考虑问题,以后会给我带来一笔财富。世上最难的问题我不认为是证明1+1=2,而是协调和处理人类之间的矛盾和问题。

风儿吹着树影摇
摇啊摇到外婆桥
想着我的好宝宝
亲爱的你是不是已睡着
月儿高高窗前照
想你的心飘呀飘
飘进你的梦里瞧瞧
姑娘想着她的花桥
我要带你到天涯海角
拜访春天向它说声早
管它漫漫长路路迢迢
爱的路上有我陪你跑
走过秋天向它问声好
就算漫漫长路路迢迢
你说好不好
雁儿飞过柳树梢
相思总是催人老
花儿含羞在偷笑
心事不说有谁会知道
心事不说有谁会知道

【MacOSX、iOS、跨平台编译】在跨平台编译时MacOSX Serria/XCode是我遇到bug最多的平台

最近被安排来搞定android、ios、mac、windows下的webrtc、ffmpeg和x264的编译问题。

除了由于webrtc配置工程的问题在windows下我自己的搭建环境无法使用,最终求助于之前使用的虚拟机环境以外,android下的webrtc都比较顺利,同样也是编译anroid环境的和windows环境的ffmpeg,相对来说也是比较顺畅(虽然还是出现了一些坎坷)。

但在Mac环境下编译webrtc、ffmpeg和x264就没有那么幸运了。简直就是人间地狱,首先说明一下,这个Mac机原先是有其他开发者在上面编译成功过这三个工程的,到我之后就开始出现了一大堆问题(当然也有可能我用的是用户新帐号的缘故)。

 

人间地狱的开始

  • 先说一说编译webrtc遇到的坑爹问题。由于webrtc编译环境我们只输出静态库,并不输出一个framework或者app,所以并不需要关心太多app层面的问题(如证书相关)。虽知道在webrtc的gyp检查项目中会对证书冲突做检查,由于机器中存在多个证书,导致gyp阶段无法生成正确的编译配置参数。导致折腾了一周,最后才发现和证书有关。虽然这个问题和gyp有一定的关系,但也只是我对mac上编译和交叉编译的被坑的起点。

 

  • 接着是x264和ffmpeg编译时,由于给我的工程之前都是能够成功编译的,现如今拿过来,除了Mac平台可以通过以外,真机和模拟器都不行。折腾来折腾去几天,最后发现是clang去找依赖的时候找错了,找了mac的依赖环境,而不是去找iphoneos的依赖,然后怎么调都没用。很是坑爹,就拿网上的现成脚本来跑也是不行。

最后去查config.log,发现一堆错误,其中ffmpeg的错误还有一个叫做gas-preprocessor.pl的执行错误,由于是通过git直接从网上拿下来的脚本,在没有任何修改的情况下,通过sftp发到mac里面,给了执行权限之后通过命令行直接执行一点问题都没有,但通过configure执行时就一直报没有权限的错,怎么也想不明白;后来试着用curl拿文件,居然通了。当时我就估计如果不是字符集的问题,就是权限标记位的问题。

接着再继续修改关于依赖的问题,仅仅一个交叉编译工具clang,居然在不同的工程里面对同一个路径参数能够出现多种不同的行为,后来还特意看了一下clang是不是GNU开源社区的代码,通过–version看到的内容如下:

Apple LLVM version 8.0.0 (clang-800.0.42.1)
Target: x86_64-apple-darwin16.4.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

可见这个坑是苹果自己的。可能是由于命令行的长度的不同,导致解析命令行的bug?或者其他什么坑爹问题?反正我是不知道了,近几年开始苹果的产品也不见得有多少优势了,正在被一点点拉小差距。如果不是为了混口饭吃,苹果的任何产品我真的不想去碰!

【MAC、iOS、Webrtc】由于证书问题导致webrtc编译隐形失败问题

由于最近在接手一些脏活累活,所以就被拉来解决一下ios下关于播放设备切换的问题,实际上当听到这个问题的现象是基本可以判断播放设备切换的时候没有重设播放参数引起的。

后面说为了给我个环境去调一下,iMac拿过来很开心的执行编译,谁知道编译隐形失败。。。之所以说隐形失败是gyt_webrtc和ninjia没有报错什么让人感觉在意的错。

捣腾了几天,七弄八弄的最后查到由于在执行gyp_webrtc后通过gyp生成的ninja中有几个主要工程配置没有生成。

当时由于感觉找到完整的问题了,今天过来就直接干脆手动执行后续的步骤把整个编译执行完成。起初发现有问题,因为i386的构架被打包到静态库了,然后网上找到删除掉i386方法,随之删掉i386手工合成最终的包,加入到xcode工程里面跑,结果连接失败,出现符号找不到。

继续查问题,最终还是留意到了gyp_webrtc的错误,错误如下:

iMac:build hyt$ ./ios.sh release
Updating projects from gyp files...
Traceback (most recent call last):
  File "../src/webrtc/build/gyp_webrtc", line 115, in &amp;lt;module&amp;gt;
    gyp_rc = gyp.main(args)
  File "/Users/hyt/webrtc/src/chromium/src/tools/gyp/pylib/gyp/__init__.py", line 538, in main
    return gyp_main(args)
  File "/Users/hyt/webrtc/src/chromium/src/tools/gyp/pylib/gyp/__init__.py", line 523, in gyp_main
    generator.GenerateOutput(flat_list, targets, data, params)
  File "/Users/hyt/webrtc/src/chromium/src/tools/gyp/pylib/gyp/generator/ninja.py", line 2469, in GenerateOutput
    pool.map(CallGenerateOutputForConfig, arglists)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map
    return self.map_async(func, iterable, chunksize).get()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 567, in get
    raise self._value
AssertionError: Multiple codesigning fingerprints for identity: iPhone Developer

网上查到主要是证书冲突问题。
解决步骤大致如下:

1,列出有效证书

security find-identity

2,寻找证书配置gyp文件

find . -name common.gypi | xargs grep CODE_SIGN_IDENTITY

会看到这么几行:

./chromium/src/build/common.gypi: ‘CODE_SIGN_IDENTITY[sdk=iphoneos*]’: ‘iPhone Developer’,
./chromium/src/build/common.gypi: ‘CODE_SIGN_IDENTITY[sdk=iphoneos*]’: ”,

3,用之前证书列表中Valid identities only的字段替换‘iPhone Developer’里面的内容

 

4,重新执行gyp_webrtc即可

【职场、工作】从一个坑入另一个坑

随着工作时间越来越就,工作的冲闯劲和对未来的展望就越来越趋于稳定和保守。一方面可能是由于年纪的增长,另一方面可能是由于阅历的增加;对待一些事情的判断开始逐渐趋于理性和保守,力图求稳并不是求过高的回报。

毕业后的第二份工作开始,我就没有认认真真的投递过简历,大多数还是将简历放在网上,等着面试邀请的电话打进来,这样做有点被动,但也比较考验人。

  • 一方面考验人的耐心
  • 另一方面有时候投递简历可能会成为真正意义上的被动方。

之所以说会成为被动方,而是求职过程其实是一个极其不平等的过程。大公司对待面试者本身就是带着挑剔的眼观去招聘,这其中除了想寻找一个所谓的“高标准或合适的人才”时,也还有一些是处于自身强势地位的一种强势心理。

对于耐心的角度出发,首先会打电话找上门的公司,一般大致可能是这么几种情况

  1. 急需用人
  2. 公司在海捞
  3. HR有指标压在身上(也许HR打电话约人面试的行为和缺人无关)
  4. 公司处于弱势,找人不容易,需要快马加鞭的招聘(可能是公司在初创、公司经营规模还不大)
  5. 真的看重这个人了(几率一般不高,就算我成功入职的公司,有一部分我也能感觉出来是勉强要我)
  6. 找去借脑,借方案(这类公司一般比较缺德,遇到了很多家。基本都是起不来的公司,因为招聘本身就是非常消耗资金和精力的过程,核算成本的话,其实还不如内部培养或找一个能做事情的去解决掉,这样更划得来)
  7. 莫名其妙的公司(可能由于公司内部比较乱等因素,招聘变成了儿戏)

 

所在在这种时候需要耐心的去面试,然后一点点的分辨好公司和不好的公司,在这个过程中,也比较考验人。首先有一些不上不下的公司,以及一些所谓的“大牛”始终会问一下让人啼笑皆非的问题,例如我被某证券软件公司叫去面试过三次(为什么去三次呢?因为不想让HR有一个负面的印象,考虑到圈子也很小,硬着头皮去走明知需要走的过场走一遍),其中这三次关键问题大致如下(不同的时间和岗位):

  1. 你写了多少行代码?
  2. 你用过C++的哪些特性?
  3. 你做的事情体现了那些价值?

由于无法复现这三次面试的场景,我就拿着我的记忆评价一下这三次面试:

  1. 最蠢的问题是第一个
  2. 最不尊重人的问题是第三个,首先面试我的人当着我的面在玩折我的简历,同样也做出了其他不尊重的行为。再次我是写代码的,我不是拉风头的,我怎么能够完整的把价值给讲清楚?我的职位也只是一个小小的开发,而不是CTO这种大领导,似乎问错对象的感觉!
  3. 最装逼又没脑子的问题是第二个。其实第二个问题属于事实而非的问题,这个问题这样问出来确实可以考察一下对方对C++特性的掌握,但是首先要搞明白的是,C++是一个比较复杂的语言,能真正搞懂50%的人也不见得很多,更何况有交叉的概念较多如何解释清楚?会用,能用好,与理论确实存在一些差异,有时过于教条可能是装逼的一种显性,就像我在看webrtc代码的时候,我就发现c++11 和c98有很大差别,如果要让我说出一些特性时,着就要考虑特性差异,有些在c98正确的特性可能在c++11就是错的,例如模板、引用等,还有各厂商编译器和标准库实现的差异性,如果是真正明白差异的,或许就会这么轻易的再问这种装逼问题了。

 

这就是和人打交道磨练性子的一个过程,也是一个成长的方式。当然有时也会遇到苦笑不得的情况,当对方要考一些基础排序算法时,由于不常用,忘记的差不多,导致写不出来或者写出来有问题,最后还被对方羞辱一番,那就比较尴尬了。因为东西确实很基础也很简单,但也要考虑实际情况,我面试不准备固然是我的问题,但难道忘记这些基础排序算法就不能写代码了吗?更何况还要羞辱人,这是有多自负的人才会这样!

 

不过对于这种守株待兔的做法有时也会让人逐渐认清一些职场规则和职场潜规则,就如大家都很向往的大公司一样。去大公司工作有很多好处:

  1. 钱多
  2. 有面子,可以装逼,虚荣心杠杠的
  3. 接触一些真大牛(但实际上真大牛不是谁都能接触,大公司永远是28原则,也就是如果不是20%里面的人,那永远接触不到真大牛,而只能接触职场上的老手而已!)
  4. 办公环境相对好一些
  5. 福利待遇在私企中相对健全一些

但大公司也有很多的不好:

  1. 政治文化严重
  2. 趾高气扬的氛围,导致内耗极其严重
  3. 凡事都要讲排场,都要论位,间接家居内耗同事拉底办事效率
  4. 隐形时薪低下!(钱多给点是让你多付出更多的劳动力的!)
  5. 手起刀落,裁员时一般不留情
  6. 虚假情谊(由于大公司氛围存在一定的浮躁,同事之间也好,员工和公司之间也罢,虚假情谊比较浓)
  7. 部分中离开大公司以后没法活(一方面习惯了大公司的排场和虚荣,另一方面和钱有关,还有一些人是身体真的垮了)
  8. 经常换血,卸磨杀驴。美其名曰为了公司发展,其实只是一般奴才了保住自己的位置执行上头的命令而已,什么是公司的发展,你可以问一下,一般没几个人能答出来,不是模板式回答,就是瞎扯。

但中国人的传统里本来就带着一些不好的地方,所以多数人为了面子和钱,还是选择去大公司。同样不例外。

 

毕业当初,因为自己学校不是很好,加上自身条件欠缺,就去了某通讯设备上的外包,待了快3年,什么的恶心事情也都见到过,也都学到了。工作这么多年,虽然没有成功去过这些规模样的大公司,但至少通过招聘这个小窗口我还是了解到了这些公司的恶心。一个公司的氛围会透过员工传递带外界,这就是我心中其实并不是非常愿意去大公司的目的(但是为了钱并且有机会去的话,我可能还是会去)。

 

再来说一说从一个坑进入到了另一个坑的事情。刚刚换工作,来到新公司,就发现有一部分人要走,加上当前的公司给我的感觉是处于混乱期,所以心中多少有一些落差。

首先说一说为什么要换工作:

  1. 想离家近一些
  2. 前一家公司太恶心
  3. 猪队友比较多(自私、坑人、唯利是图等等)
  4. 想给自己一点生活的时间
  5. 想把技术做深

为什么要来这家公司:

  1. HR给我的感觉中规中矩(没有有太多好感,也没有太多不好的感觉)
  2. 面试的人给我的感觉是前辈值得学习
  3. 公司业务相对稳定(只是凭借之前的经验去了解)
  4. 有机会把技术做深
  5. 离家近

 

其实当时还有几个机会,尤其有一家还是挺中意的,但由于面试的过程中发现了一些无声的硝烟,外加工资给的稍低了一些,所以我就犹豫了一会,对方看我犹豫了一会索性就找别人继续面试了。

从一个坑入另一个坑,这句话有时是一种认知获得的表达,有时是一种心态的反应。对于我来说心态的反应似乎会更多一些,对于认知的表达可能还略少。现在空余时间突然多起来一点了,有时可能又会动脑子思考问题,一思考搞不好就成了迷惑之点。

可是能该规划一下工作以外的事情了。

【c++11、编译】较新版本的chromium和webrtc代码已经开始用c++11了

在最近webrtc的几个版本里,我一直尝试在windows上搭建编译环境。因为用惯了vs 2010,并且vs 2010之后的版本存在一个xp runtime的问题,所以一直想在vs 2010上编译。但是用不行,一直报错。

最近在看c++11标准,对比vs 2010 、vs 2013、vs 2015之后发现确实在c++11的支持上,vs 2015会更全面一些,所以最终还是只能用vs 2015作为编译环境来使用。

【心态、矛盾、心理】乡愁 & 小小鸟 & 送别

刚才大致回顾了一下这么几年过来的博客,好像关于谈论家的事情不多。当然也看到了好玩的东西,学生时代的我还是挺好玩的。

算上读书时间离开老家已经有10年多了。小时候, 比较烦家里大人,因为学习成绩不好,大人也爱唠叨,所以巴不得离开这家,考大学的时候就特意报考了离家远一点的,并且还是沿海一带的城市。后来就去学校报到了。

当初我还记得,刚开始读书那一年不是很适应集体宿舍生活,另外还有一个比较招人厌的室友,所以当时也很郁闷;后来才知道读的学校理工科并不是很好,所以趁室友不在的时候,拿起座机往家里打了电话,想回家复读重考。后来和父母争执了一段时间,无奈沉气继续读到大学毕业。

每年寒暑假前夕和外婆、父母打电话就是说回家要吃过桥米线………等等东西。大一大二时回到家还没啥,除了打游戏就是睡觉、吃饭,老家是个小地方也没有啥可以游玩的地方,所以渐渐的就开始觉得暑假无聊起来;大三开始暑假就开始留校,跟着老师做点事情,一方面为了学点东西,另一方面也是为了挣点钱。起初也没有觉得什么不妥,一方面可以挣钱了,也能学点东西,另外可以远离父辈们的唠叨。

一转眼到了大四,临近毕业,整个人就开始处于恐慌状态。因为面临着回老家还是留在杭州的问题,家里父辈们也开始电话催我回家工作事情。事实上我学的专业回到老家就要面临转行的问题,另外也确实厌烦父辈们之间的唠叨,所以在压力下还是找了一个杭州的工作暂且安顿下来了。

一转眼就是两年多过去了,工作嘛总有很多不顺心的事情,后来就换了一个工作。换到了一个不算正确的地方工作,进去就遇到了人事争斗,为了以后,我还是沉着气继续学东西,刚好也遇到了一个还算愿意帮我的人,然后开始了独自学chromium的路程。迫于人事斗争的压力,最后换了一家公司。这家公司开始接触webrtc,也算是chromium这条路线上的;在音视频上的工作和学习就持续到现在。

一转眼就这么几年过去了,回过头去想一想,当时还觉得日子过的真慢。现如今觉得过的很快!

工作以后,每年都会回家过年,今年也不例外。但随着年纪变大,对回家这个事情就有种说不出的想法;看着老爸、老妈、外婆,加上2016年6月外公刚刚不在,心理就有一些想法。

放假在老家的时间越久,心理就就有矛盾。一方面觉得大城市压力太大,不符合我对生活的追求。另一方面,老家这边没有我能做的工作,同时父辈们虽然没有以前唠叨了,但还是有点唠叨,各种情绪交加。

大学的时候,我的语文老师就说过,杭州这个地方容易出思维细腻的人。我并非杭州人,但似乎在一点点的被杭州的一些文化影响着。小时候老家,有很多外来人口,一直不理解这些外来人口为什么要来我们这几年甚至几十年然后又回老家了,现在似乎渐渐的明白了。

其实回顾走过的这些年头,以及多次询问自己真实的追求是什么时,得到的答案让我感到简单又困难:普普通通的生活!

小时候因为嫌家里人唠叨,大学的时候是有就业恐慌(一方面自身造成,另一方面学校老师渲染起来的),工作几年后就开始出现了一些情绪。如果把经济发展的严重失调进行修正,经济发展不再那样过度的失衡时,可能我会选择回老家,亲情不可丢。

具体的心态,就让下面的三个段落来表述就好。

 

余光中 – 《乡愁》

小时候,
乡愁是一枚小小的邮票,
我在这头,
母亲在那头。
长大后,
乡愁是一张窄窄的船票,
我在这头,
新娘在那头。
后来啊,
乡愁是一方矮矮的坟墓,
我在外头,
母亲在里头。
而现在,
乡愁是一湾浅浅的海峡,
我在这头,
大陆在那头。

任贤齐 – 《我是一只小小鸟》

有时后我觉得自己
像一只小小鸟
想要飞
却怎么样也飞不高
也许有一天我栖上枝头
却成为猎人的目标
我飞上了青天
才发现自己从此无依无靠
每次到了夜深人静的时候
我总是睡不着
我怀疑是不是
只有我的明天没有变得更好
未来会怎样
究竟有谁会知道
幸福是否只是一种传说
我永远都找不到
我是一只小小小小鸟
想要飞呀飞
却飞也飞不高
想要飞呀飞呀飞
却飞也飞不高
我寻寻觅觅
寻寻觅觅一个温暖的怀抱
这样的要求
算不算太高
所有知道我的名字的人啊
你们好不好
世界是如此的小
我们注定无处可逃
当我尝尽人情冷暖
当你决定为你了的理想燃烧
生活的压力与生命的尊严
哪一个重要

 

朴树 – 送别

长亭外 古道边芳草碧连天
晚风拂柳笛声残夕阳山外山
天之涯 地之角知交半零落
一瓢浊酒尽余欢今宵别梦寒
今千里 酒一杯 声声喋喋催
问君此去几时还
来时莫徘徊
天之涯 地之角 知交半零落
一壶浊洒尽余欢 今宵别梦寒
天之涯 地之角 知交半零落
问君此去几时还
来时莫徘徊
问君此去几时还
来时莫徘徊

选择离开一家成长中的公司,实属无奈!

就在最近,我做了一个决定,离开现在所在的公司。这个选择实属无奈!

为何这样说?因为这家公司目前在某一个细分行业上算是成长中的公司,况且产品中有一定的产品是我直接参与或主导的!

选择离开最根本的原因是啥?

1、老板!

2、以前的领导!

3、该裁掉但不裁的员工!

4、现在的领导!

5、未来!

 

— 老板 —

和老板接触不多,但老板在我的印象中并不是很好,大致用这么几个词汇描述一下:

1、抠门(其实我想理解成自私)

2、过于激进

3、不懂得尊重员工

4、想学大公司把自己“教主化”或“神化”

5、主导了一部《宫心计》

 

 

— 以前的领导 —

以前的领导,这个领导和我接触相对较多,好坏印象均有,但最让我受不了的印象大致有:

1,刚愎自用(上任CTO之后表现出来)

2,过于强势或者说喜欢强压

3,有一定的信口开河

4,很喜欢调侃人(不是一个懂得幽默的人,把调侃当幽默)

5,不作为(在管理上的事情有一定的不作为,没有做好服务下属),对于一些合理的诉求一般是睁眼闭眼。例如强制塞人的情况,或者遇到不行的人时不愿意进行调整(一般不行的人基本都是他自己招进来强塞给我的)

6,喜欢饶过我插手我组内的工作(这个破组长不是我相当,当时是他要让我当的,结果还要插手,这是什么意思?)

7,很多时候,表面上要和我商量事情,其实有时心中已经有定局,只是让我屈服罢了。

8,后期招了好几个基本不能干活,薪资又很高的人,其中有一个人还和我有很严重矛盾(这是最不能忍的)

9,下属之间出现矛盾时,不及时介入,或者睁只眼闭只眼。

10,不懂得尊重人!

 

 

— 该裁掉又不裁的同事 —

为何这么说?这些人不是能力很差,就是喜欢好斗(争权夺势)。其中有这么一个人和我矛盾很严重。

这个人号称从B公司出来,来到我们公司时,一副莫名其妙的优越感,给人感觉就是:“我来你们公司是很不情愿的”。

找他商量问题的时候,基本不等听完话,就开始教我写代码。真的感谢他的指导,因为我只是问日志需要输出到什么地方(我们提供一个SDK,我在考虑日志一致性的问题)。

后来我在做图像处理的时候,最终我也做出来一个demo可以跑了。对方当着所有的小头头问了我一句话:“你们图像处理是不是调一下opencv的api就好了?”  当时我苦笑了一下,回到:“我们主要用目标检测。” 就这样这位大神还不停止发问,继续问是不是调api。看来这位大神真的很厉害!

接着以前的领导下来,新的领导上位。新官上任三把火,调整整个组织架构,我的组就被拆掉(当然我也很乐拆掉,因为之前领导留下的那些坑人同事,我就可以和他们告别了!)谁知这位大神和别人私下吃饭的时候说了这么一句话:“某某组如何不拆的话,不是他走就是我走”。当然他会说句话的原因之一,是我有一次多管闲事,私下找他聊了一下:“收敛这点,不要这么狂”。会找他的原因很简单,原因还在于外界以为我和他是一条船上的蚂蚱。

关于同事的问题话就说到这里了,其实这也只是最突出的一个(事实上确实也是,他一直想做CEO和CTO这个位置)。当然也还有很多应该裁掉但不裁的人。

 

 

— 现在的领导 —

现在的领导。现在的领导其实我并不看好他,主要原因他是专注业务部分,技术上还是有些不懂。另外就是管理能力不行。所以这么大的摊子他应该管不下来,从长期上说老板那个尿性,他早晚也要被换掉。另外还有就是分赃不均了。同样在做事情上,也存在一定的不尊重人的情况。

 

 

— 未来—

我不看好这个公司的未来,首先老板就这个尿性,公司如何继续的成长下去。另外一个上面的这些类型的人也会制约着整个公司的发展,从长期去看,这个公司没什么希望,所以只能走。

 

 

在这个公司,很有部分产品是我参与或者主导(独立)做出来的,要说感情是有一点,也不想轻易的把所有的成绩让给别人,但真的实在是无奈!至少我选择离开,加入新的公司,或许还能有新的技术高度和发展;同样在这个公司我所积累的东西,我也可以带走,因为那些都在我的脑里,谁都拿不走。

 

【老电脑换cpu】还要再战5年!

用的是联想的y460 n,cpu是i5 460m。最近用chrome开页面cpu老飙100%,然后半天不见动静(选项卡跟没什么动静一样的感觉),本来也还能忍忍,最近编译代码也慢了不少。

网上查了一下,主板供电和芯片组最大最佳支持是i7 640m,昨天cpu到货,换上之后发现chrome开网页快了不少,除了cpu频率提高了以外,估计就是aes的作用了。

接下来哥的电脑还要再战五年!

【吐槽2016,展望2017】因祸得福的一年

该回顾一下2016了。其实2016遇到的事情还是蛮多的,奇葩的事情也不少。

2016主要经历了几个事情:

1,两连逼宫的一哥们上书,老板接机换掉一直想换掉的人

2,各种啥鸟程序员逐渐浮出水面,各种坑爹事情逐渐躲起来。我一点点的变成了吃瓜群众,无力。。。。

3,改朝换代当天,摇到车牌。悲喜交加。。。。

4,2016年回顾了2015和之前做的音视频技术,整理了一部分音视频的技术点,收获不小。

5,图像处理的demo在不情愿被逼迫的情况下被成功捣腾出来,方法刚好和正确的套路一致。然后逐渐从demo捣腾成“玩具”。

6,2016下半年遇到各种不开心的事情,但刚好在年末时节,出现了神转折。

7,站在当前,回顾以往。当初坚持的持续学习,持续深入的目标没有错;之前的投入,如今已经一点点收见成效了。

8,常常被人说:“你怎么这么累?” ,“你想的简单点”,“不要总是愁眉不展”。起初我还出现了很严重的自我怀疑,现如今事实证明了,开始进入我阶段性收获的时节了

 

 

2016的总结:不要人云亦云,也不要太过于随大流,更不要过于随性。社会不简单,但也不是非常复杂。遵守和学习社会的规则重于其他任何要素。

2017展望:要么继续把音视频做好,要么就深入下去,把图像处理基础打好。未来不要想着两个都能做精,但两者融合到一个使用场景中会是一种趋势。

【程序结构、系统构架】有效且高效的程序结构/构架之一

首先看一下下图,下图是stun或者说是NAT穿越时需要用到的NAT检测服务器拓扑组网图:

 

 

目前,PC B和PC A需要进行p2p连接,首要要知道他们所在的网络是呈现哪一种NAT类型。因此就涉及到了NAT检测服务器(stun服务器)和客户端。

NAT检测服务器的功能实际上很简单,就是自身拥有2个或2个以上的IP,并每个IP监听至少2个UDP端口,一共就有4个可连端(即4个socket)。

当客户端与NAT服务器进行通讯时,NAT服务器和客户端都将会知道客户端外网IP:Port,和客户端内网的IP:Port。

但在实际设计NAT检测服务器时,就遇到了一个问题:NAT服务器是否需要记录客户端的IP:Port信息。如果需要记录出于什么目的?如果记录那需要多少存储能力和计算能力?

 

首先分别讨论一下存储和不存储的情况。对于存储客户端IP:Port信息来说,可以有效的统计和判断当前客户端群(带了个“群”字样)的NAT情况,并且能够间接节省掉一个统计数据上报的过程,数据的及时性和有效性也得到了保障。但带来的是服务器程序设计上的复杂性和性能损失,带宽成本相对于不存储的来说或许会更低一些。

对于不存储的情况来说,客户端可以设计的很简单,并专注于NAT类型检测的任务,单点抗压能力可以发挥到最大;但带来的是数据统计与反馈方式需要另辟蹊径,增加了客户端的复杂度,某种程度上来说会增加带宽的支出(需要将IP:Port数据上报)。为了该工作还需要配套一个完整的数据统计与上报模块(服务端+客户端),某种程度上增加数据反馈的不可靠性。

 

在看新版本webrtc的p2p模块时(nat检测服务器),发现服务端并不存储任何客户端的信息,只是由客户端来自行决定是否存储。于是想到了这个问题。

 

对于NAT服务器来说,确实不应该存储过多的客户端信息,但如果在需要可靠性较强的环境中时,NAT检测服务器还是存储一定的客户端信息。并将一些服务器不需要做的计算和存储工作保留在客户端可以有效的达到合理使用的目的。

 

例如:在NAT检测中,往往会出现两种情况,即:

1,多级NAT中的NAT在不同时间段呈现不同的NAT类型(不规则NAT)

2,在单级NAT中,由于IP、Port限制型场景中,由于检测次数的不够充分,将IP:Port误判断成其他类型的NAT。

在这两种情况中时,需要进行定量或者定性统计分析时,如果数据仅仅保存在客户端时,由于样本不够大(NAT检测次数不够多、该局域网内可能不只一个客户端),导致分析不充分,进而影响NAT穿越成功率以及间接影响分享率、分享公平性。

所以需要将此类数据进行服务端统计,并作筛选,才能有效的判断出该NAT环境下较大的概率会呈现哪一种NAT。

【脑筋急转弯】利用set和vector做排序、去重

在看webrtc的代码时,遇到一个ip地址池在set和vector中颠来倒去的代码,顶着看了一会,后来才反应过来。代码如下:

std::set<rtc::SocketAddress> addrs(all_servers_addrs_.begin(),all_servers_addrs_.end());
all_servers_addrs_.assign(addrs.begin(), addrs.end());

原先在all_servers_addrs_中已经保存了一个ip列表,通过导到set之后,首先去重了ip,接着再按照’>’算术运算符来进行排序,接着在通过assign将排序去重后的数据返回vector。

这样做的好处在于,时间复杂度为set排序复杂度+set随机访问的时间复杂度的总和,大致可以避免vector(类似线性表)的较高插入删除复杂度的问题。

【opencv、颜色存储方式】imread的IMREAD_COLOR方式解码后是BGR方式存储

最近的项目中需要用到将RGB空间转换成HSV空间,转换后一直都感觉不对劲,最后才发现imread中的IMREAD_COLOR参数。

在opencv中的注释中提到IMREAD_COLOR方式是将数据尝试解码成BGR方式存储。

数据解码后,实际在上内存中的数据存储方式确实为BGR,通过imwrite或者imshow时,数据应该会被默认转换成实际的图像格式(没有看代码去考证,因为bmp就是BGR的序列)。

在进行色彩空间转换时,例如:BGR(或RBG) -> HSV时,如果将CV_BGR2HSV和CV_RGB2HSV混淆,最后的结果会引起色彩区域置换。所以就有问题了!

【matlab、启动错误】在远程桌面中无法启动matlab问题

最近一直在通过远程桌面的方式使用笔记本,突然发现matlab死活都打不开,出现如下错误

555

 

起初以为安装出问题,后来网上看了下才知道是远程桌面的锅。直接用基本登录,问题解决。