scons(a software constructe tool)
MMF
macOS+gtest+vscode环境搭建
cd 到某个目录,然后在command窗口git clone https://github.com/google/googletest.git 下载gtest源码
Reference
https://www.bilibili.com/video/BV1L7411L7aZ?spm_id_from=333.337.search-card.all.click
硬盘文件在Mac上操作不了的问题
通过command指令修改在硬盘文件上的属性,移除只有finder可见属性。然后就可以操组,copy到mac上。
1,先安装软件 Mounty for NTFS,这个软件可以让Mac系统支持NTFS硬盘读写操作。
2,文件变灰色的原因是文件的名后面多了一个@,可以在终端中用命令行消除。
在终端中输入xattr -d com.apple.FinderInfo ,然后在后面输入文件地址(直接把文件拖入终端中就行了)。回车该文件就变回可用状态了。
回顾大年初二 丢失手机事件总结
背景
大年初二世界之窗夜场游玩,逛到阿尔卑斯冰雪世界,买了游玩票,玩了陡长滑道,然后电话亭落雪场景拍照,接着到了儿童滑道,看到了很多小朋友,不要脸的和小朋友排滑道,接着不幸的事情发生了,滑下来后,走了几步,摸了下口袋,发现手机不见了。
经过
发现手机不见,第一反应是落在了滑圈里头。转过头发现,不知道自己用过的圈,是在哪个小朋友手里,然后就开始绷紧神经,快速在离自己附近的圈进行排查,在圈内花了不到三秒用手做圆弧的轨迹搜索(ps.因为圈在别人手里不好意思花太长时间占用别人游玩的时间,后面从监控视频里头看到,自己过于着急,并没有花较多的时间在每个圈找,其实自己在手机存在的那个圈里有找),没有找到。
然后就开始用女友的电话打我的电话,我手表还能感受到电话,然后找圈,发现还是没有找到。接着第四个电话,手表感应不到了,说明有人捡走了,但是手机能打通。
接着去前台寻求广播帮助和登记手机丢失。继续拨打手机号发现,已经被关机了,说明拾取手机的人不想交还。
女友的手机find我的手机,需要登陆我的apple账号,但是我已经忘了,只能回去用我的Mac电脑或者我的另外一部iPhone手机用Find功能。
自己借助女友的手机边走出世界之窗边紧急冻结微信,支付宝等关键账号。过程中急于冻结关键账号,没怎么看路,小转了一个弯。不能冻结的账号,只能回去用电脑去冻结。
出来世界之窗门口,寻求站岗民警的帮助,其要我先拨打110。于是个人决定先回家冻结关键账号,再报警。由于期待能联系上拾取我手机的人,没有去挂失自己的手机号,想先等两天,再挂失。
由于我住的离世界之窗只有10分钟左右的单车时间,走路大概18分钟左右,于是借助女友的手机扫开了美团单车,先行一步回家,冻结关键账号,然后将手机mark as lost,标记为丢失,只要我的手机开机就会被定位和锁定位置。接着我在住的地方进行了110报警,说明了手机丢失情况,寻求民警帮助。
不到三分钟,接到了所在街道的民警电话,并来到了我所住的地方核实身份以及情况,并做好了录影。其建议我去查看监控,然后他说是想现在去看还是等到明天早上,因为是晚上10点多了,并且冰雪大世界工作人员已经下班,应该是无法查看监控了,于是我选择了明天去查看监控。
于是上午10点,我带上了我的另外一部手机,去到了世界之窗门口,和世界之窗的站岗民警联系上,要求看监控,然后反馈是在冰雪世界丢的,就带我去对应的点查看监控,然后冰雪世界的监控负责人要11点才上班,然后就等到了11点,相关工作人员就带领我们去对应的监控室查看,反馈了是在儿童滑道并且是昨天下午7点20到7点30之间,监控的位置很好,确定了我出现在镜头,然后确定我坐的那个圈,过了两分钟发现了拾取手机的人。
拾取手机的人是一个中年男人,他是看到了前一个小朋友的圈中一个亮屏幕的手机,因为那时候我正在用我女友的手机打,那个中年男人发现手机之后,立马拾取捡到兜里,然后在雪道上头要起孩子和老婆遮挡一下视线,然后将我的手机关机。接着他们一家先后开始离开滑雪场准备回家。
和民警一起查看完监控,截取多个摄像头的视频,并下载好截取的关键视频。民警开始联系所里的人做相关的人脸识别,因为他们是一大家子,两个小孩两个大人,拾取手机的中年男子还手提两个明显的白色包,只要识别出任何一个就可以确认拾取手机的男子。并且民警也告诉我他这种行为是拾取,并不是偷,不能立案,只能协助你,尽量和那个人取得联系,要起归还。
接着中午在益田假日广场吃完饭,在女友的帮助下,扫码骑车去在新年营业的联通营业厅办理丢失补办新卡。
上午和民警一起确认完监控,民警要我和女友该干嘛干嘛去,接下来他会去处理,下午就收到了民警联系电话,已经联系到拾取手机的人,其愿意归还,由于其住的较远,就采取了邮件方式。
我和拾取我手机的人通过民警作为中间人,取得了微信联系。通过合适的文字表达,表示感谢,接着我向其发了2个200元感谢红包,告知其我的相对不是那么具体的地址和电话,要其通过顺丰到付邮寄过来。其下午通过顺丰给我邮寄了过来,我第二天上午收到我的手机。
总结
首先要称赞深圳民警的办事效率,花了不到一天的时间很幸运的找到了我的手机拾取人,并作为中间人要拾取人归还。
手机作为现代人的必需品,和空气一样重要的东西,要妥善保管好,尤其在游玩的时候,要建立好足够的防丢意识。
苹果手机内置不错的find防丢软件,即是电话卡注销,也是会通过GPS实时反馈所丢失的手机位置。
遇事不慌张,镇定处理,控制好自己的大脑神经,要暗示自己,尽己所能的处理好自己所能做的就行,同时做好最坏的打算,不需要过分的焦虑。
尽人事听天命。
ffmpeg_use
视频格式转换
前言
有位同仁,最近在拓展副业,将自己的作品上传到某网站,简介部分需要swf格式的video,而本地只有mov格式的,需要转换,寻求我的帮助。
由于本人是程序员兼个人电脑是mac,周末有时间还能稍微折腾一下,不希望直接去app store寻找购买现成的软件,也不想去下载盗版破解软件不安全。在网上搜索到了一个开源的音视频处理软件FFmpeg,很多音视频软件是基于该开源软件进行的二次开发。本文是基于其提供的静态库,采用敲命令行的方式进行视频格式的转换。
安装
FFmpeg官网提供了三种方式安装其软件:
使用Homebrew
brew install ffmpeg下载官网源代码自己编译
static build的使用
由于博主升级了操作系统,Homebrew不能使用,使用brew install ffmpeg会自动updating homebrew,然后updating失败,可以使用export HOMEBREW_NO_AUTO_UPDATE=true取消自动升级,但是安装还是失败了,于是博主采用了第二种方式直接去ffmpeg官网下载fstatic build for macOS。
安装与使用
- 将下载下来的压缩包解压
- 将解压出来的文件放到/usr/local/bin路径下(右键单击Finder–>Go to Folder…—>输入/usr/local/bin—>return键)
- 打开terminal,cd到/usr/local/bin/,执行chmod 777 ffmpeg指令,修改该build的使用权限
- 在你存放视频的目录打开terminal,执行ffmpeg -i xxx.mov -f swf xxx.swf指令
后继
具体其他的使用指令可去其官网查看,会介绍其使用语法,或者ffmpeg -h也有简单的介绍。
自己后续可能基于其库进行二次开发。
python脚本搭建编译框架
背景
目前博主,接触到了一些资深开发工程师,分享了一套采用python语言搭建提高效率的编译框架,抽离公共部分,组建独立仓库,给手机负责通信的模块代码搭建编译框架,并且将很多关于各个团队的feature宏抽离出来,从第三方的源代码解耦出来,在一个单独的fd文件中进行管控,而各平台的差异在平台专有的json文件中描述,并且可以更快的模块化编译。勾起了博主比较想深入研究一下这套东西的欲望。
大多数Linux发行版本中,python是其标准系统组件,可以直接运行用python编写的代码。并且通常情况下,用python编写的脚本易于理解、扩展、维护和复用,性能也优于shell脚本,并且python本身更能让你专注于解决问题而不是去搞明白语言本身。有很多公司采用python搭建编译框架。
例如,一些手机设备厂商,会购买高通很多芯片平台,这些芯片平台的软件代码购买过来后,手机设备厂商有很多客制化的代码,需要移植在各个平台,并且各个平台有自己的一套shell编译脚本,需要单独移植和适配。采用pthon编译框架后,单独的仓库和分支,可以方便很多feature和多平台的管理,并且可以快速适配新平台,提高了代码移植和适配的效率降低出错的可能性。
查看高通给过来的源代码,使用的就是python来组织编译的脚本,一些终端设备厂商更多的是向高通看齐。
shell脚本运行python
在模块编译的时候,大家都习惯了shell脚本编译,于是乎就有了在shell脚本中去运行pthon脚本。
shell脚本中,指定python编译版本(which python指令查看应用安装路径)和传递给python脚本的参数:
1 | echo "传递的参数为:$*" |
python脚本:
1 | # -*- coding: utf-8 -*- |
运行结果:
make
终端设备的代码主要分为AP(application processor)侧和CP(communication processor)侧,CP侧主要是一些通信模块,例如,基带处理器(baseband processor)、rf器件等,对应的代码这块都是用C/C++语言编写,对于这些代码的编译就有很多值得学习的地方。
对于C/C++语言的编译分为四个阶段:预处理、编译、汇编和链接
未完待续…….
硬编码和软编码
在工作过程中,听到同事说起,硬编码和软编码,大脑大概明白其意思,具体一想,如何专业的表述这对孪生概念呢,需要展开来了解一下。
在网上查阅这两个概念,由于当前短视频较火,这两个概念在视频编解码方面有所指,硬编码是利用硬件芯片本身GPU、DSP等非CPU去给视频编码,而软编码则指是通过软件本身或者CPU对视频进行编码。
而目前我在工作中接触的这两个概念主要是针对代码的灵活性和可扩展性角度来讲的,更多的是一种设计思想。
硬编码
简单直白的说就是写死值,之前博主在一家公司写代码的时候,称这种在代码中是一种坏味道,例如,if(a == 10),这个10一看不知道是什么意思,直接用的魔数。亦或解析某个路径下的文件,写代码时,直接将这个文件路径固定,不管以后是否挪到了其他路径,默认它就永远是在那个路径下,没有考虑变化。
软编码
一句话来说,定好地方,方便后续修改和扩展。在大型软件编码中,软编码很重要,会有很多地方用到相同的值,如果是在某个地方定义好值,在代码中用它的别称,如果后续这个值有变化,可以很方便的修改,只需在一处修改。软编码可以理解为以不变应万变,这个不变是指在代码中大部分逻辑不需要动,变是指后续市场需求的变化而需要软件做的一些适配,而这种适配只需要修改某些小角落。