Monthly Archives: April 2013


Andrew Mason被解雇了,该说点啥呢?不知道!好吧,那听听人家是怎么说的?还有Andrew Mason自己是怎么说的? I don’t root for failure and don’t believe that dancing on graves is ever the way to go. It’s an especially appropriate personal creed when a good guy who I think overplayed his hand decides to retreat throwing rose petals instead of grenades. Andrew Mason is out […]

Andrew Mason’s Daily Deal: ‘I Got Fired Today’


我在LinkedIn上看到这篇文章,感觉写得非常不错,所以就转过来。如果有时间的话,可以考虑给翻译一下。这样可以跟一些懒人一起分享学习。 Here are ten traits that any great employer should recognize and reward instantly. Zero Creatives/Getty As a longtime employer of dozens, I was always grateful to have good employees. It takes a lot to recruit and maintain top talent. Every once in a while special employees come along that […]

10 Things Really Amazing Employees Do


把我的C盘空间用EASEUS Partition Master 8.0.1调大了一点,以使C盘不再一直处于空间不够的警告,结果重启Windows之后就出现错误 error: incompatible license.Entering rescue mode… grub rescue> 首先交待一下我的环境:我的系统比较复杂,由于工作需要,共装了三个OS:一个Windows 7,一个Ubuntu 11.04,一个Ubuntu 12.04。 然而由于硬盘比较小,最近一年多里已经屡次因为硬盘空间不够而发生这样那样的问题。这次也是一样。这次我是把我的C盘空间用EASEUS Partition Master 8.0.1调大了一点,以使C盘不再一直处于空间不够的警告,结果重启Windows之后就出现错误: error: incompatible license. Entering rescue mode… grub rescue> 我非常明白这是由于硬盘序列ID变了才导致GRUB无法工作。一开始我以为用正常的grub-update就可以搞定(grub rescue下手动启动的方法可参考下面的附录),结果不然。 于是俺使劲的找,终于找到了 正确的方法: GET BOOT-REPAIR: Three possibilities to get Boot-Repair: 1) Boot-Repair-Disk is the official CD containing the very last version of […]

WIN7下调整C盘分区大小后:error: incompatible license.



虽然NDK编译ffmpeg的文章在网上已经多如牛毛,但还是经常有人在群里反反复复的问android怎么编译ffmpeg?这个不行,那个不行。。。 我之前也写过两篇关于NDK编译ffmpeg的文章,但基本上写了一大堆的步骤,统统被人无视,为什么?因为大家都很懒,懒得去管那一堆的这个那个步骤。只希望直接拿到所有的源码,然后打一个命令一次性搞定。 好吧,既然大家都这个想,那我就搞一个出来,但还是会有几个“烦人的”步骤: 先交待一下编译环境: 1. Ubuntu 11.04(任何一个发行版都OK) 2. NDK:当前最新的ndk-r8d 具体步骤: 1. 下载ffmpeg for android补丁。这个补丁我是放在我的一个svn服务器上的,所以你需要安装一个svn客户端,RapidSVN, RabbitVCS等都可以,然后checkout https://svn.rg4.net:8443/svn/ffmpeg/(有人回报说一直用TortoiseSVN会一直报需要用户名密码才能check out,如果碰到这种情况请用ustcer/ustcer登录) 2. 下载ffmpeg源码0.11.2(Happiness),虽然现在最新版的ffmpeg已经到1.1.2(Fire Flower)了,但很不幸,0.11.2是当前最后官方支持android的版本(非官方的有很多,最新版本也都可以编译,但用于正式产品,…我不 知道),你暂时不用费力去找了,因为我刚刚已经“费过力”了。ffmpeg下载地址:http://ffmpeg.org/download.html 3. 将步骤2下载到的ffmpeg解开,替换到步骤1的目录下 4. 重新更新ffmpeg for android补丁(因为步骤3已经用原版的ffmpeg 0.11.2的源码覆盖了补丁,这一步是为了将补丁再次打上),将所有冲突的文件给Revert掉。 5. 打开一个terminal,进入ffmpeg补丁目录,到ffmpeg这一层,然后在此: a. 执行config.sh(若是你的ndk目录跟我不一样,请先修改config.sh中最上面的两个设定的路径,相关设定可参考下面的附录) b. 执行完成后,打开config.h,找到其中的#define restrict restrict,将其改为#define restrict,并保存退出。 c. 执行ndk-build。 完工。 附录 1. NDK路径设定说明: 这里包括两个部分: a. 路径位置 我的android SDK及NDK都是放置在/opt/google这个目录下的,完整路径为: SDK:/opt/google/sdk NDK:/opt/google/ndk-r8d […]

ffmpeg for android 编译


年关临近,又得开始准备年终总结了,我先简单罗列一下,以便写总结的时候有个参考(仅限于产品部分)。 元旦之后一个多星期又开始搞Hermes相关的一些功能,但是说实在的,我对此真的不太积极,而这主要的原因是在于,我认为(一直认为)这并不是“走在一条正确的道路上”,而且,I don’t in charge of this product。 众所周知,STUNT相对于STUN及成功率是相当的低,而且相对来说,中间流程控制起来会更加的麻烦。但是事实上,虽然我在项目周会或者其他多种场合说 明和强调,Hermes却一直在沿着这条我“个人”认为不正确的道路上走下去,而且越走越远,甚至开始衍生出其他许多这样那样的“花头”来,如: 1. 为节省打洞,把原来两开的两种socket(一种用于信令及控制,一种用于视频的传输)进行合并,以复用socket。 2. Tunnel 这如果是在其他“环境”下,可能直接就被枪毙了,可是,我们已经花了很多人力来朝着这个方向来做基于这么一个思想的东西。不对,不是一个,而是很多个衍生 产品。当然,需要去做这些衍生产品,以及这么急着在这个不确定的、甚至明知很滥的也不可能规模化的基础上去做的原因很大一部分是在于市场的需要,或者说是 那些Board members的要求。 可这实在是让人受不了了,再加一句我“个人”的见解,这些东西即使做出来到头来很多做法也都最终会被推翻掉的,再过阵子,大家回头来看这堆东西,说不定就会称之为“垃圾”,在一个宝贵的时间里做出来的“宝贵”的垃圾。可是,你又能怎么办呢? 我先来数一数这N宗罪(不仅限于Hermes,所以题目也要改一下)。虽然在各种场合,我已经说了太多遍了,但也许我也还是得再说。 第一宗罪:似乎天下只有TCP,没有UDP。 从绑定单一的8000端口,到程序的实现,无一不是朝这个方向去做。 第二宗罪:太多的历史包袱,每个版本都在版本兼容性上花费一极大的力气,却导致许多规划、计划都无法实施。 在iNVR/eLook项目上,其实我一开始是有很多改善的措施,并且相当一部分的功能都已经实现,但由于要兼容各种旧版本的客户端,并且要兼容Windows的各种产品,结果后来又费力把已经实现好的功能拿掉,改成跟 第三宗罪:又想提升打洞成功率,又不想花时间去研究UDP及STUN的解决方案。 虽然说,其很大一部分原因是因为其他项目一直delay,但是既然Hermes项目一直在推进,为什么就不能优先去把Hermes的路给走对了呢? 未完,待续。想起来再补充。

Hermes 之TCP及STUNT N宗罪


Network servers are traditionally implemented using a separate process or thread per connection. For high performance applications that need to handle a very large number of clients simultaneously, this approach won’t work well, because factors such as resource usage and context-switching time influence the ability to handle many clients at […]

How to use epoll? A complete example in C



元旦过后我就开始准备自己搞一个epoll的封装库,以期扔掉这个无比庞大的boost(对x86的服务器系统来说是还OK,但对一些嵌入式的应用来说,实在吃不消)。 但是始终卡在client端socket关闭后,server端针对broken pipe的signal(多线程中的signal)的处理上,这个问题一拖就拖了将近一个星期,实在汗顔。 后来实在有点火了,就准备照boost asio来扒一个下来,结果,扒着扒着发现asio原来完全可以独立于boost来运行(作为一个独立的library)。 这下真的搞的火大了。OMG,我又浪费了将近一周的生命… 以下是来自asio作者Christopher Kohlhoff对asio与boost.asio的区别说明: Asio and Boost.Asio Asio comes in two variants: (non-Boost) Asio and Boost.Asio. The differences between the two are outlined below. What are the differences in the source code? Where do I get a release package? Where are the source code repositories? How […]

Asio and Boost.Asio


这是来自MBA Online的一篇文章,记录了Android从诞生到现在的、在移动终端上的统治性的地位,我有向部门下的许多同仁推荐,但要放到网上来实在有些困难, 因为这图实在太大了……however, this is a really great graphic. WTH, just share it. 原文来自:http://www.mbaonline.com/android/

A Graphic about the Rise of Android


EasyIPCam原先的时候在部分型号的手机(或平板)上出来的图像颜色不正,原因就是在于我错误的把NV12当作YUV420P来处理了,后来已更正,但一直未对此问题作记录,现补上。以供其他碰到类似问题的朋友参考。 以下是,关于几种常见YUV格式的一点扫盲知识: NV16就是 YUV422SP NV21就是 YUV420SP NV12就是 YUV420SP格式,Y分量平面格式,UV打包格式。 1)YUV420SP中的S和P分别是什么意思? SP(Semi-Planar)指的是YUV不是分成3个平面而是分成2个平面。Y数据一个平面,UV数据合用一个平面。UV平面的数据格式是UVUVUV…。 2)yuv格式中的interlace \ progressive分别是什么意思阿 ? interlace指的是隔行扫描,是把一帧图像分成上下两场,上场(Top field)的数据是整个图像的奇数行(1,3,5,7…),下场(Bottom field)的数据是整个图像的偶数行(2,4,6,8…)。两场穿插组合起来变成一帧完整图像。而progressive指的是逐行扫描,一帧图像 的每一行都按顺序排放。 若您发现EasyIPCam存在什么Bug,或者对EasyIPCam有什么意见、建议或者想法,可直接在http://bbs.rg4.net/thread-13892-1-1.html留言,或者通过mail与我联络,感谢您的支持和回馈。

Android 视频采集相关格式



前两天收到QA回馈说Android版的机顶盒客户端在浏览Panasonic BL C1A设备的时候出现下半部分画面绿屏的问题。具体状况如下图: 后来经确认是由于该设备用ffmpeg解码只能解出YUVJ422P格式,而实际上在该版的程序里未判断ffmpeg解码成功后的实际格式(default为YUV420P),就把它当作YUV420P去用,去转RGB565了,结果就出现这个Bug。 记之。

Android STB(机顶盒)客户端Motion JPEG视频下半部分绿屏问题


让你的Freescale i.MX 53 Quick Start Board 支持SATA硬盘。 由于项目使用中需要大容量硬盘,而Freescale i.MX 53 Quick Start Board又没带完整的SATA硬盘支持。事实上板子上有SATA数据库线接口,但却不给带电源线接口,我….。 所以,如果你要接SATA硬盘到i.MX53 QSB就相当于必须要自己外接电源(除非你自己重新layout板子),如:从一台PC中接一根电源出来,然后接到硬盘的电源上,接法如下:

Freescale i.MX 53 Quick Start Board 接SATA硬盘


这句话来自于Star Wars, The Clone Wars (IV) – Episode 18,很经典,原文是:Trust is the greatest of gifts, but it must be earned,中文被翻译为:信任如至宝,取之须躬行。我也一直拿来作为自己的一句警言来提醒自己。 而前两天长假前的一件事情,又让我间接的想起了这句话。 9月29日,周六。 对于大陆的员工来说,这是长假前最后一天班,而对于台湾的员工来说,则是正常休假。 下午两点多,考虑到园区里大部分的公司都已经没人(提前下班),而且,部门下有的人已经于十多天前就已经请好假,买好回家的车票,甚至所有行李都已经带到 了office就等着下班的情况下。我就未经请示台湾那边的主管,自己擅作主张,并发mail给我台湾那边的主管说:“由于大陆这边马上放假,部分路段车 流限制/管制,故上海这边研发将下午3点半 提前下班(包括我在内的部分同仁因有比较urgent的 assignment,还会在office 正常上班)。若有什么事情,请以电话或mail方式联系。” 事实上整个office,就只有研发部门几个人,再加一个行政主管(她后来在3点多一点就走人,说是请假了),其他人都已经不在了(跟往常一样),但其他 部门怎样怎样,跟我们没有任何关系,所以我也只能写研发部门要提早下班。另外,真正需要提前走的只有两人,而我又不想在mail里指名道姓的写的那么清 楚,以避免影响那两位员工在HQ主管眼中的观感(或者也可以上升一个层次到: Trust)。 应该说,在我写这封mail的时候,是不曾想到会收到回复的,因为毕竟台湾今天休假,而且在写之前我也专门打过我的主管的office的分机,没人接。 然而事情的发展,根本不是像我自以为是的那样。 三点左右,收到了我的主管的回复:“不宜有此行為.E600 每個人都有未完成的工作 (such as: Maggie CM 必需在 10/31 前完成, Michael 有 GV 及行安, …..).若有不得已, 非早離開不可, 必需請假, […]

Trust is the greatest of gifts, but it must be ...



前两天有位新晋程序猿网友“被遗忘的角落”(494932623@qq.com)来信,希望我能帮帮他,给你提供一个大概的规划、思路。以前也有很多网友给我来过许多这样那样的mail,但由于实在没时间,更因为懒,所以甚少回信。恰前阵子由于各种关系,我也希望自己日后能开始做一些更加有意义的情况(包括准备着手做一个开源项目),所以,今天晚上我就以我这些年来的经验,对他目前的状况作了一点回复。 以下是他的mail: 今日下午在公司搜索QDbus时,进入了阁下的站点,很幸运。认真的看了您的几编文章,我的感觉是很实际。 先自我介绍,今年毕业,专科,年初就职至今。 在ubuntu先开发qt。 目前的疑惑是,在编程过程发现很多自己的不曾接触过的概念,思想,技巧,总的说是能力、经验不多。 以前还弄不清,一个程序里的 instance 的存在必要。c++智能指针、泛型编程刚有初步的认识。 最近在调试进程间通讯,主管已经嫌弃我花的时间有点多了,就qdbus的基本使用我现在还是迷迷糊糊。 由于阁下的网站上关于qt、c++的资料不是十分的多,但我能感觉到你对编程的那种驾驭的能力。 我的奢望是,阁下能否在有时间空余的情况,给我提供一个大概的规划、思路。 朋友,感激。 以下是我的回复:   对于一个刚参加工作(不久)的人来说,可以说是从一个基本上一无所知的状态(很悲哀,中国的大学里所教的东西很少是你毕业后能真正派上用场的,不管你是专 科毕业,还是本科毕业),突然的发现有一大堆的知识需要学习和了解,这对绝大多数人来说都是一个很大的冲击,甚至打击。 所以,对于你这一类的人,我的建议是:好好学习你的工作。 工作入门: 一般新员工入职都会有一到三个月的培训期,这个时候主管会给一个或者几个学习任务,但总的来说培训内容都是那种相对单纯并且目标直接的题目,而且通常会有人对你进行一些必要的指导; 一个月,或者三个月的培训期过了之后,不出意外,你就转正了,这时候先不要急着高兴,这个时候往往是更重要的一段时间,主管会给你分派一些简单但正式的工 作,而这些简单的工作则可能会让你自己独立的去完成,这才是真正考验你的时候,公司会考察你的各方面表现,以决定给你委以什么样的任务和角色。对于一个应 届毕业生来说,没有几个公司会在一年半内对你抱太大的期待,而你的任务就是必须要让公司对你有所期待。 但切忌想法太多,这个也想学,那个也想学,结果就是什么也没学好;更别思想不端正,去想什么跳槽之类的事情,你要搞清楚,现在是你入门的时候。而要想入门快,唯一的方法就是努力把工作相关的技术/技能学好、掌握好,更多、更好、更积极地去参与到产品的开发中去。要知道,你自己学的东西永远都是半成品,或者一知半解就很容易会放弃深入的,而工作相关的技术和技能则是会做成一个真正的产品的,这个才是真正可以学到技术的方向和领域(这一条基本上对所有人都适用)。 在最初的时候,如果基础不是很好的话,切忌刨根问底,有些东西你只要做到“知其然,而不知其所以然”就可以了,等你逐渐的进入状态了,再来考虑“知其然,又知其所以然”。 同时,尽可能的多了解一下原理性的一些东西,如:把产品的框架都了解清楚,至少要从理论上知道这个框架有什么好,为什么好;另一方面在业余的时间,争取多 补充一些基础知识,像你这样的可以补补C/C++和Linux/Unix相关的知识,这样也可以解决你“就qdbus的基本使用我现在还是迷迷糊糊”的这 种问题。 中国现在的年轻人基本上都是独生子女,平时习惯了“拿来主义”,许多人都喜欢走“捷径”。而以你的状况,我看应该不是会去跟人“拼爹”的那种,自力更生是 你唯一的选择,而如果你想要的是一条“捷径”,我可以很负责任的告诉你,没有。只有一步一个脚印,才能走得更好、更远,从而走出一条捷径。 我的经验: 总的来说: 以我个人的经验(我的经验是一路撞墙撞过来的)来说,作为一个程序猿来讲,理想的一个练级过程(不是职业生涯)大致如下: 初级(通常是前两到三年):好好做好所在公司的工作。努力学习和掌握公司产品相关的技术(越多越好),多看多学多问多试多用,同时多阅读一些基础知识相关的资料,尽可能往“深”的方向走,为自己的将来打好基础。 中级(再两到三年):如果你前面的基础已经掌握,那经过那两三年,你应该已经成长为公司的一位主力(之一),然后,再来考虑把自己的视界扩大,逐步往“广”的方面发展。 高级(在一个领域有 五六年的工作经验,并且涉及范围相对广泛):这个时候,你就应该可以不再需要重点考虑“练级”了,自己来好好考虑“职业生涯”这个名词,相信到这个时候你 自己已经有相当的主见和见解,并且具备足够的经验和智慧来解决你所要面对的这种问题了,不管是要考虑继续深入,还是转型,抑或其他。 几点tip: 这是任何时候都有用的几点Tip,跟技术无关,却跟你的未来大大的有关。 1. 如果你真的真的一点也不喜欢自己现在在做的工作,那我劝你就不要做了,先好好的去搞清楚自己想要做什么。 2. 如果你有一天要跳槽,尽量做到每份工作做满两年,这样的经验积累才是真正有意义,否则,现实一点就是浪费时间、浪费自己的生命。也许有些人会说,没事,哥年轻,啥都缺,就不缺时间。 3. 要做好一个程序猿,English是very重要的! 推荐几本书 顺便给你推荐你现在的阶段可能会用得上的几本书: 《C++程序设计语言》:http://product.china-pub.com/196448 ,C++之父的大作。 […]

回复《编程之路的困惑》


1
马上十一了,又将有几天空,我在想要不要把我做过的一些东西整理一下,做成一个开源项目,以活跃QQ群和论坛。 但不知道有没有人兴趣。 先把几个选项放出来,如果感兴趣的人多,我就做,实在没有人感兴趣,那我就。。。自己玩吧。 现已经发了一个投票,希望大家踊跃投票。 投票地址:http://bbs.rosoo.net/thread-14364-1-1.html 以下是上面有写名字的几个软件的介绍及下载地址: RTSPPlayer: RTSP/RTP流媒体播放器,可以支持Windows,Linux,Android,iOS(目前只有做Linux和Android版),目标是做成一个ONVIF播放器。http://rg4.net/p/rtspplayer EasyPlayer: 一个基于ffmpeg的全格式播放器,支持Windows/Linux/Android,但每个版本都不怎么一样,Windows/Linux的网上太多了,Android上的也不少,但真正能跑的开源播放器很少,所以,优先Android上的版本。http://rg4.net/p/easyplayer EasyIPCam:一个RTSP/RTP流媒体服务器,目前软编支持Linux/Android(可以做到支持iOS),硬编支持Freescale i.MX27) http://rg4.net/p/easyipcam EasyRTMP: 将普通的视频文件,或者是来自网络的(如:Youku, IP Camera, DVR, DVS)视频转换成rtmp流,并喂给FMS/Red5,使你的客户端不需要安装任何插件即可浏览这些视频(条件是有Flash支持), http://rg4.net/p/easyrtmp EzStreamSvr: 基本功能类似于EasyIPCam,不同的是 EasyIPCam是小型应用,并且视频是采集上来的,而EzStreamSvr的目标是大型流媒体服务器,而且视频源同EasyRTMP,可以是任意来 源的视频,包括普通视频文件(全格式),以及网络上能访问到的任意视频, http://rg4.net/p/ezstreamsvr EasyDSS:支持DSS扩展的独立服务。 http://rg4.net/p/easydss 同时,上面这些软件都只是一些实验室的作品,未经严格测试,许多功能也有待进一步的完善,所以,我希望许多习惯潜水的大牛们也能出来一起帮我完善,而不是我一个人在傻干。 当然,如果你其他好的项目,也可以在此留言,若是的确不错,而且也是我力所能及范围以内的,也可以立项来做。

准备做一件有意义的事情:启动一个开源项目


其实刚毕业、工作两三年的时候,我就一直有在考虑是否该再去读一下研,而且当时在北京公司,我也买了一些相关的资料与书籍(像本科时的高数、线代、概率、英语等书我都没扔掉),但由于各种各样的原因,这个事情一直耽搁下来,直到前几天。 首先,还是必须得说一下,今年我的运气实在是不好,很不好。 且不说工作上的事情,因为工作顺利与否跟你自己的技术、职责领域,跟你的能力以及你对工作的估算和准备充分程度存在更多的关系。所以,我就从生活中碰到的 几桩“坏运气”来讲:先是年初的时候,我工作用的NB硬盘,存了工作以来十几年的资料硬盘坏掉,要命的是,在坏掉前几天,我刚刚由于另外几台电脑重装系 统,把所有的资料都备份到这个硬盘上,还没来得及再次备份,它,它,它就嗝屁了(WTF),且拿到数个数据中心做修复也都无法恢复,结果导致所有重要的、 不重要的数据都丢失了,然后紧接着第二天Office里的那台也PC坏掉,再然后不久,一天在回家路上被人撞车,又让我“休整”了很久,再再然后(也就是 前几天)骑车滑倒,再次变成一瘸一拐的,可以说,这半年多来,坏运气一直笼罩在我身旁,就连Facebook上许多朋友都劝我赶紧去拜拜。 而这一连串的坏运,虽然还没回家去拜拜,但是这也让我真的、好好的停下来思考了一通,再加上前两天给女儿买了一张新床,一张高低床,然后在整理房子,整理书架的时候,翻出了十二年前买的几本书,才想起,原来当年自己是多么认真的想再去读读书的。 既然如此,那好吧,我就来了。 经过几天的咨询,我准备报名中科大的软件工程硕士,今天是报名的日子(作为上海这边的第4期的插班生,明年年初参加考试),顺便参加了第4期的开学典礼。 中科大软件工程硕士第四期上海班开学典礼 中科大研究生院副院长 屠兢 在开学典礼上致词犹记当年一班人在那儿笑:考研是对自己没信心的一种表现,那么,好吧,同学们,你们想笑我的就来笑吧,而且,我的新同学里有许多人都要比我小十多岁(我整个就是一个小老头)。 但是,不管怎么样,我决定了,而且我一直相信那句格言:永远都不晚! 只要开始,永远都不晚!每个人都有懦弱的一面,有时是害怕,有时是焦急,有时是抱怨,但更多的时候是后悔,后悔当初没有把握住机会。但是,如果你好好想想,如果N年后自己才来做这件事,你会发现,现在做真的不晚,不管是什么事! ·爱,永远都不晚。 ·学习,永远都不晚。 ·微笑,永远都不晚。 ·相信自己,永远都不晚。 ·从现在开始,永远都不晚。 对于再次做一个学生,我同样相信,今天去做,不晚。即使等到毕业那天,我也快40不惑了。

决定重新开始做一个“童鞋”!