Archive

Archive for the ‘编程技术’ Category

C++的反思

June 16th, 2015 62 comments

最近两年 C++又有很多人出来追捧,并且追捧者充满了各种优越感,似乎不写 C++你就一辈子是低端程序员了,面对这种现象,要不要出来适时的黑一下 C++呢?呵呵呵。

咱们要有点娱乐精神,关于 C++的笑话数都数不清:

笑话:C++是一门不吉祥的语言,据说波音公司之前用ADA为飞机硬件编程,一直用的好好的,后来招聘了一伙大学生,学生们说我靠还在用这么落后的语言,然后换成C++重构后飞机就坠毁了。

笑话:什么是C++程序员呢?就是本来10行写得完的程序,他非要用30行来完成,并自称“封装”,但每每到第二个项目的时候却将80%打破重写,并美其名曰 “重构”。

笑话:C容易擦枪走火打到自己的脚,用C++虽然不容易,但一旦走火,就会把你整条腿给炸飞了。

笑话:同时学习两年 Java的程序员在一起讨论的是面向对象和设计模式,而同时学习两年 C++的程序员,在一起讨论的是 template和各种语言规范到底怎么回事情。

笑话:教别人学 C++的人都挣大钱了,而很多真正用 C++的人,都死的很惨。

笑话:C++有太多地方可以让一个人表现自己“很聪明”,所以使用C++越久的人,约觉得自己“很聪明”结果步入陷阱都不知道,掉坑里了还觉得估计是自己没学好 C++。

笑话:好多写了十多年 C++程序的人,至今说不清楚 C++到底有多少规范,至今仍然时不时的落入某些坑中。

笑话:很多认为 C++方便跨平台的人,实际编写跨平台代码时,都会发现自己难找到两个支持相同标准的 C++编译器。
—————

Q:那 C++为什么还能看到那么多粉丝呢?
A:其实是因为 Windows,因为 Windows的兴起带动了 C++,C++本来就是一门只适合开发 GUI的语言。

Q:为何 C++只适合开发 GUI呢?
A:你看 Unix下没有 GUI,为啥清一色的 C呀?所有的系统级问题都能在 C里找到成熟的解决方案,应用级问题都能用其他高级语言很好地解决,哪里有 C++什么事情呀?

Q:你强词夺理,Unix下也有 C++的项目呀。
A:有,没错,你任然可以用任何语言编写任何糟糕的代码。

Q:别瞎扯了,你都在说些什么?连C++和 Windows 都扯到一起去了。
A:回想下当年的情景,一个大牛在教一群初学者如何编程。一边开发一边指着屏幕上说,你看,这是一个 Button,我们可以用一个对象来描述它,那是一个 panel我们也可以用一个对象来描述它,并且你们有没有发现,其实 Button和 Panel是有血缘关系的,你们看。。。这样就出来了。。。。下面的学生以前都是学着学校落后的教材,有些甚至还在用 turboc的 bgi库来画一些点和圆。哪里见过这么这么华丽的 Windows 界面呀。大牛说的话,象金科玉律一样的铭刻在自己幼小的心理。一边学着 Windows,一边发现,果然,他们都需要一个基类,果然,他们是兄弟关系,共同包含一些基本属性,可以放到基类去。他们越用越爽,潜意识里觉得因为 C++这么顺利的帮他们解决那么多界面问题,那看来 C++可以帮他们解决一切问题了。于是开发完界面以后,他们继续开发,当他们碰到各种设计问题时,反而认为肯定自己没有用好 C++。于是强迫自己用下去,然后就完蛋了。

(点击 more展开)

Read more…

Categories: 编程技术, 随笔 Tags:

精通 C++ 是一种怎样的体验?

June 3rd, 2015 3 comments

没什么用,精通C++不代表能写出好程序,就像知道回字有四种写法照样无法写出好文章来。不要把精力浪费太多具体某语言上,不管你搞网络,还是搞数据库,搞数字信号处理还是搞人工智能,或者和李开复一样搞语音识别,你会发现,功夫都在语言之外。

花太多时间学C++一点用都没有,不如打牢基础然后具体去学习各种知识,或者直接进行一些具体实践性的开发。所以我看简历,只会注意他具体做了什么,解决哪些问题,取得何种成绩。精通或者熟悉C++基本都是当垃圾信息过滤掉的,如果你简历上最耀眼的只是熟悉某语言,那和垃圾简历没区别。

所以,不要雇佣号称精通C++的人就是这个理由。

其实最精通中文的的人是各种语言学家,大学里专门研究中文的人,哪个字的出处,哪个用词正确与否,那个生僻字怎么念都了然于胸。so what ?能代表他们就能出口成章,提笔成文么?

就像《三体》写得好,是因为大刘在科学在剧情构思上的知识牛逼,而不是大刘会咬文嚼字。Kaiser 在知乎上谈笑风声,因为他历史知识丰富,《史记》《汉书》《三国志》信手拈来,外加观点独到,幽默风趣,从来不是因为他知道回字有四种写法,或者八种写法。

我们说 Fabrice牛逼,因为他对 数学,信号处理,计算机体系等三个方面有着深刻的认识,从而他能做出 ffmpeg, qemu, tinycc 这样的项目来,从而他算 pi可以算到世界第一快,所以大家觉得很牛逼,这并不是因为听说他 C++有多牛。

所以看到简历上如果没什么值得称道的东西,只有一个 “精通C++”,在用人公司眼里就和一个笑话差不多。


补充, @欧阳婕 网友提到的陆游诗,

《示子遹》
——陆游
  我初学诗日,但欲工藻绘;
  中年始少悟,渐若窥宏大。
  怪奇亦间出,如石漱湍濑。
  数仞李杜墙,常恨欠领会。
  元白才倚门,温李真自郐。
  正令笔扛鼎,亦未造三昧。
  诗为六艺一,岂用资狡狯?
  汝果欲学诗,工夫在诗外。

注意第一句,“我刚学诗,只想精通辞藻” 就是这个所谓 “精通C++” 的状态

Categories: 编程技术 Tags:

如何实现移动设备的通用手势识别?

April 19th, 2013 4 comments

移动设备多用手势进行输入,用户通过手指在屏幕上画出一个特定符号,计算机识别出来后给予响应的反应,要比让用户点击繁琐的按钮为直接和有趣,而如果为每种手势编写一段识别代码的话是件得不偿失的事情。如何设计一种通用的手势识别算法来完成上面的事情呢?

我们可以模仿笔记识别方法,实现一个简单的笔画识别模块,流程如下:

 

第一步:手势归一化

1. 手指按下时开始记录轨迹点,每划过一个新的点就记录到手势描述数组guesture中,直到手指离开屏幕。

2. 将gesture数组里每个点的x,y坐标最大值与最小值求出中上下左右的边缘,求出该手势路径点的覆盖面积。

3. 手势坐标归一化:以手势中心点为原点,将gesture里顶点归一化到-1<=x<=1, -1<=y<=1空间中。

4. 数组长度归一化:将手势路径按照长度均匀划分成32段,用共32个新顶点替换guestue里的老顶点。

 

第二步:手势相似度

1. 手势点乘:g1 * g2 = g1.x1*g2.x1 + g1.y1*g2.y1 + … + g1.x32*g2.x32 + g1.y32*g2.y32

2. 手势相似:相似度(g1, g2)=g1*g2/sqrt(g1*g1 + g2*g2)

 

由此我们可以根据两个手势的相似度算成一个分数score。用户输入了一个手势g,我们回合手势样本中的所有样本g1-gn打一次相似度分数,然后求出相似度最大的那个样本gm并且该分数大于某个特定阀值(比如0.8),即可以判断用户输入g相似于手势样本 gm !

Categories: 人工智能, 编程技术 Tags:

快速可靠协议-KCP

December 22nd, 2012 21 comments

KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,并以 callback的方式提供给 KCP。连时钟都需要外部传递进来,内部不会有任何一次系统调用。

整个协议只有 ikcp.h, ikcp.c两个源文件,可以方便的集成到用户自己的协议栈中。也许你实现了一个P2P,或者某个基于 UDP的协议,而缺乏一套完善的 ARQ可靠协议实现,那么简单的拷贝这两个文件到现有项目中,稍微编写两行代码,即可使用。

URL:https://github.com/skywind3000/kcp

Read more…

Categories: 编程技术, 网络编程 Tags: ,

Windows字体为什么那么难看?

September 6th, 2011 No comments

1)很多字库比如宋体,12号以下都是点阵字体。

2)GDI太老了,只有5级灰度,而且AA是横向的,Y轴方向没有AA。

3)雅黑又不能通用,且小字号时高低不平。

 

改进:

1)字体SuperSample。

2)勾边。

image_thumb8

image_thumb13

image_thumb15

image_thumb17

Categories: 图形编程, 编程技术 Tags:

【原创】快速除以255的方法

August 31st, 2011 No comments

经过若干次试验修改,研究出下面这个快速/255的宏,可以在 X属于[0,65536]的范围内误差为零:

#define div_255_fast(x)    (((x) + (((x) + 257) >> 8)) >> 8)

传统来说,人们习惯于将 /255改为 >> 8,但是这样误差挺大的,比如先乘以255再除以255,连续做十次,如果用>>8来代替除法,那么十次之后,误差为10. 另外一种常见的近似法是((x) + 255) >> 8,这种累积误差也挺厉害的。

因此>>8代替/255结果是比较粗糙的。而这个宏的开销比起>>8来说成本大12%。

经过测试65536000次计算中,使用/255的时间是325ms, 使用div_255_fast的时间是70ms,使用>>8的时间是62ms,div_255_fast的时间代价属于可以接受的范围。

下面是测试程序(点击more展开):

Read more…

Categories: 编程技术 Tags:

[转载] Why I Love Python – Thinking in C++ 作者用Python后的想法

April 21st, 2011 1 comment

image image

他横向对比了: Perl, C++, Java, Python,然后给出了10大使用Python的理由,比较经典。

下载地址:http://www.skywind.me/mw/images/c/c2/Why_I_Love_Python.rar

Categories: 编程技术 Tags:

[讲义] 游戏客户端十二小时入门

April 9th, 2011 1 comment

PPT1

这是我2005-2007年在公司培训时候的讲义,当时现场效果相当热烈:

可以到下面地址下载:

Read more…

Wordpress Social Share Plugin powered by Ultimatelysocial