Brandon Online Brandon::RenderLife()

18Sep/110

Where to use lamda expression in c++ (1)

Scenario where new lamda feature applies.

Background:

One of the new features in C++11 (previously referred to as c++0x) is lamda expression. See more introduction on lamda expression here.

Scenario:

Consider the following example:

  1. class MyObj   
  2. {   
  3. public:   
  4.     std::string _name;   
  5.     std::string _location;   
  6. };   
  7.   
  8. class MyObjContainer   
  9. {   
  10. public:   
  11.     const std::string GetNameFromFile()   
  12.     {   
  13.         // Fake return, just for example purpose   
  14.         return "MyName";   
  15.     }   
  16.     const std::string GetLocationFromFile()   
  17.     {   
  18.         // Fake return, just for example purpose   
  19.         return "MyLocation";   
  20.     }   
  21.   
  22.     void UpdateData(MyObj& obj)   
  23.     {   
  24.         // Load data from file   
  25.         obj._name = GetNameFromFile();   
  26.         obj._location = GetLocationFromFile();   
  27.     }   
  28.   
  29.     bool HasObj(const std::string name)   
  30.     {   
  31.         // How to specify the 3rd param below?   
  32.         return std::find_if(vec.begin(), vec.end(), ???) != vec.end();   
  33.     }   
  34.   
  35. private:   
  36.     std::vector<MyObj> vec;   
  37. };   
  38.   
  39. MyObjContainer mr_pickle;   
  40. mr_pickle.HasObj("MyName");  

We're trying to update the data if it's not initialized yet. But how to specify the 3rd parameter of std::find_if above? You might consider use functor as below.

  1. bool HasObj(const std::string name)   
  2. {   
  3.     struct test   
  4.     {   
  5.         test(std::string myname) {name = myname;}   
  6.   
  7.         bool operator()(MyObj& obj)   
  8.         {   
  9.             if(obj._location.empty())   
  10.                 UpdateData(obj);  // Would not compile!   
  11.   
  12.             return obj._name == name;   
  13.         }   
  14.   
  15.         std::string name;   
  16.     };   
  17.   
  18.     return std::find_if(vec.begin(), vec.end(), test(name)) != vec.end();   
  19. }  

However, it does not work since the internal functor cannot access the outside member function.

Lamda expression solution:

So here comes the lamda solution, easy and straightforward.

  1. bool HasObj(const std::string name)   
  2. {   
  3.     auto IsRequestedObj = [&name, this](MyObj& obj)->bool  
  4.     {   
  5.         if(obj._name.empty())   
  6.             UpdateData(obj);   
  7.   
  8.         return obj._name == name;   
  9.     };   
  10.   
  11.     return std::find_if(vec.begin(), vec.end(), IsRequestedObj) != vec.end();   
  12. }  

标签: 没有评论
8Sep/111

[ZZ] 暗黑破坏神Ⅲ客户端下载及测试帐号获取指南

跳票n年,万众期待的大菠萝3终于要来了。请看:暗黑破坏神Ⅲ客户端下载及测试帐号获取指南。

14Aug/110

c语言声明英语翻译器

初学c语言的朋友或许会对有些晦涩的声明感到无比头疼,比如下面这个:

int (*(*foo)(void ))[3];

你能在3秒内说出这句声明是什么意思吗?

或许有朋友会说,如果有个c语言的翻译器就好了,把看不懂的c语言声明翻译成自然语言,或者把自然语言描述的变量声明翻译成c语言的声明。

cdecl.org为此而生。

很有意思的网站,或许可以对刚刚接触c语言的朋友有所帮助,不过目前只支持英文描述。

12Aug/110

[zz] 为什么我们的程序员难晋升

转自业界资讯站

作为一个在国内工作的程序员,深有同感。很多的求平衡,很多的求稳定,不敢大刀阔斧的启用新人,破格提拔,使得公司内部暮气沉沉,人心不稳。试问,只为自己着想的mgr,又如何能为员工着想,又如何能为公司着想?

第一流的大佬招第一流的人才,第一流的大佬识得第一流的人才,这才是良性循环。所谓好马常有,伯乐不常在。如果mrg根本不知道底下的员工要什么,追求什么,目标是什么,又谈何同进共退。一个有战斗力的团队,不是三天两天就能凑起来的,必须长时间的磨合,荣辱与共,共患难同享福,才能创造出凝聚力强,战斗力高的团队,这在很大程度上考验一个mgr的驭人之术,也在很大程度上决定了这个团队的研发能力和向心力。

今天看到微博上@hellodba发的一个帖子:“内部晋升越来越困难,但是外部来的大P越来越多,所以很多人都选择跳槽”,之后我从三个方面简要的进行 了回答:“外面来的总是有包装的,内部的都是肉身PK,此一输;外面来的总是小股人马,内部的一批批的,升谁都伤感情,此二输;外面来的通常都是大佬推荐 的,没有特别重大机会,人不会来,内部的就不解释了,成果都被大佬吸收,难有机会,此三输”。之后讨论不断,我也余兴未了,继续写来。

这个世界上有一类人特别苦逼,苦逼到什么程度呢?他们省吃俭用攒钱买房,结果房价越来越贵;公司外部竞争激烈,他们工作异常繁忙,披星戴月,日复一日;技 术更新行业罕见,他们要随时调整心情,随时学习知识;他们长期和机器为伍,大多比较呆傻,比较单纯;还有很多不一一例举,这一类人就是程序员。

而就是这么一类程序员过着这么苦逼的生活,在公司内部却难以获得公平的晋升机会,外来的和尚总是在不断打破平衡,甚至是刚毕业的新和尚拿得都比老和尚多,这是全行业都罕见的奇观,IT人有幸经历了。

  • 某创业公司,某个程序员要离职,老板甚至不问问他直接领导的意见,就同意了,没有挽留,之后大骂不忠诚,这个人拿3k,拿了2年,他走了以后,老板用5k雇了个新面孔,但就是不愿意给这个老人晋升,不愿意给加到哪怕是4k。
  • 某上市公司,游戏部门突然从外部空降了一个领导,原因是原大佬被挖走以后,剩下的人升谁都有意见,难以服众,不从外部请人来镇不住局面,这个人一来,大家是团结了,团结起来和这个人斗,但最后还是和解了。
  • 某国际大公司,某人伪造简历,包装的如花似玉,获得高职,工作主要有下属完成,他只需要汇众汇报即可,越混路越宽,直到某天事发,依然是高官。
  • 某IT企业,某清华同学离职时语重心长的对我说,XX(可以理解为网游,搜索,电商任意一种)是00-02年毕业的这些人清华人的机会, 我们就是比某人强十倍也没有机会,也得从下面做起,搜索的天时不属于我,此人去了某金融分析软件公司,目前是高管,同期留在某IT企业的其他同学依然过着 苦逼的生活。

举了这么多例子,我想说得是为什么不给你晋升这个问题,或者晋升很难,为什么?

1)大佬的问题

你晋升困难,最大的主观原因在你自己,最大的客观原因在你的直接上司。付责任人的说,目前很多企业的领导是不合格的,他们大多80后,没有为他人着想的思 想基础,一味的考虑自己,不顾下属,曾经我对某人说,你说你是合格的领导,你说出你下属每个员工租房在哪里,每月多少房租,我就同意你是合格的领导,结果 他羞愧不言。你晋升不了,很大程度上是你的领导没有帮你,连你每月房租多少都不知道,你指望他帮助你提高技术水平,帮助你晋升?

2)大佬的大佬的问题

你大佬的大佬,level很高,他需要引入新鲜血液,他知道这个队伍缺什么,这个是他思考的问题,他需要找牛的人来补这个缺口,于是一个光鲜照人的牛人进 来了(虽然两年后也会泯为众人)给队伍带来了新鲜的血液,但你的大佬升不上去,你大佬边上的位置被这个人占了,你的位置在哪?

3)公司的问题

各大企业给员工的再教育和培训都是不尽相同的,但大多口号是一致的,在工作中锻炼成长,这句话是最扯淡的,国外很多大公司是有很完善的培训和再教育计划 的,会给员工一个充电的机会,并且给其一个完善的培训后,以便于让他在新升职的岗位上能够很好的胜任。在国内大公司都在找牛人,就是不愿意自己培养,原因 是什么,不解释,你懂得。

4)你的兄弟

很多时候让你升不了职恰恰是因为和你一起战斗的兄弟,他们工作也很不错,你升职了,他们怎么办?这也是一个平衡的问题,你很努力,为什么你没有带动你的兄 弟一起努力,你上去了,需要你这帮兄弟的支持,他们会支持你吗?曾有一个说了一句话,我觉得很值得回味,“当大家都认为你该升职了,就是你升职的时候 了”,细细品味,很有道理。

5)你自己的问题

最后你升不了职是你自己的问题,每天工作很忙,没时间充电,每天工作压力很大,来不及学习,每天这个那个,一年下来碌碌无为。你提高了自己的效率了嘛?你 周围有朋友再帮你吗?你知道你要学什么嘛?你知道什么样的工作才能超出领导的期望?,你超出领导期望后却没有升职和领导沟通过吗?我曾在某企业,我周围的 几乎所有人加薪升职都是和领导沟通后才获得的。指望主动给你加薪升职,不如指望自己的沟通。

6)还是你自己的问题

你选择的这个行业是不是对的,公司是不是对的,就好像我说的这个清华的同学这个例子。如果你能耐大可以选大公司,PK到一票牛人上去,如果你能耐不大,去成熟大公司,还心理期盼高薪升职就不现实了,不如去一个有前途的中小公司,开创自己的事业。

从企业角度出发,如何创建一个合理公平的晋升机制呢?

1)第一流大佬才会招第一流的人,第二流大佬只会招第三流的人,因此公司一把手必须是第一流的,价值观才能靠谱,制度才靠谱,没熟读历史,不理解中国文化的,建议不要做公司一把手。

2)晋升的制度必须公平,面向每一个人,每一个层次,这往往很难做到,做前端的和做后台的不好比,但做前端的可以和做前端的比。必须要有公开公平的比拼,已获得升职机会。例如某公司做一个高维矩阵分解的难题,大家机会均等,性能最快,效果最好,胜出者升职,带领团队。

3)鼓励公司职员交流,传播和帮助他人的文化,一个人如果乐于助人,帮助他人提高技术水平,这个人升职升上来,大家都会顶,反之,你保守,不帮助他人,水平再牛,升职上来也没人支持。

4)可以给职员一些挑战的机会,提供更多的资源,比如某公司的闪电计划,超越了谷歌搜索效果,就是一个很好的例子,要敢于给一些勇于挑战的职员更多的资源,在严酷的战斗中考验,并提供充分弹药。

5)给予内训机会,邀请业界牛人讲座,送职员去美帝考察开会乃至工作等等。培训机会是发达国家企业的一种非常好的激励措施,一个岗位5个人培训,最好的上岗,这是一个很公平的机会,培训机构足够独立。

方法有很多,只要这第一流的大佬,心中有着这帮打生打死的兄弟,办法总是有的,不要总是考虑自己的业绩,考虑自己的乌纱帽,做到这一点很难很难,但制度不是只有这位大佬可以制定,任何职员都应该积极投身到制度建立的过程中,要敢于提出自己的观点,毕竟公司是大家的公司。

我就写这么多,我是一个十年一线程序员的身份写这篇博客的,我努力做到客观,但我相信我更多代表的是劳方立场。

 

7Aug/110

[ZZ] Template to print data from all kinds of STL containers

  1. // Used by the sample below to generate some values
  2. struct fibonacci
  3. {
  4. fibonacci() : f1(0), f2(1) { }
  5. int operator()()
  6. {
  7. int r = f1 + f2;
  8. f1 = f2;
  9. f2 = r;
  10. return f1;
  11. }
  12. private:
  13. int f1;
  14. int f2;
  15. };
  16. int main()
  17. {
  18. std::vector<int> v;
  19. std::generate_n(std::back_inserter(v), 10, fibonacci());
  20. std::cout << v << std::endl;
  21. // Example of using pretty_ostream_iterator directly
  22. std::generate_n(pretty_ostream_iterator<int>(std::cout, ";"), 20, fibonacci());
  23. std::cout << std::endl;
  24. }
9Jul/111

How to integrate Google +1 button into WordPress

First of all, I'm talking about the plus one (+1) button provided by Google. If you have no idea about the +1 button, you're kinda of out-dated.  See this page for the introduction on +1 button.

Google claims that +1 button helps people to find relevant content, I assume it brings more traffic to your site. So it's a good idea to have a try especially it casts no over-burden.

I downloaded and tried the +1 button plug-in from wordpress org, but it did not seem to show any +1 button on my site. So that's why I came up this post for how to integrate it by yourself.

I'd like to put the +1 button beside my post title, in that way, when people reading the post and find it useful, they can directly add value for that. And it looks like this:

Steps to integrate:

1. In your backend console, select Appearance and select Editor, you need to modify Header and Single Post Template and/or Page Template.

2. Header.php

You need to include the js inclusion in header.php so you can later reference the items from it.

In your Header.php, place following code before </head> tag.

  1. <script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>

3. Single Post Template (single.php)

You put the +1 button display code along with the post title, with following code snippet:

  1. <table>
  2. <td width="99%"><h2><a title="<?php the_title(); ?>" href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2></td>
  3. <td align="right"><g:plusone size="medium"></g:plusone></td>
  4. </table>

The table here is to format the title and the +1 button.

4. (opt) Then repeat step 3 on Page Template (page.php) if you want the same effect on pages.

4Jul/114

ifttt (if this then that)

ifttt 是一个最近才火起来的网站,非常有意思。

ifttt即If  This  Then  That,你可以在ifttt上设定一个条件,当达到你设定的任意一个条件时,便触发任意一个(你指定)动作。这里的“任意”是指开放的互联网服务,目前所支持的服务见下图。

经验证,SMS服务 + 中国移动 = 不可用。

应用实例:

好玩的可以有:if某女谈论“失恋”、“男友+讨厌”、“伤心”、“难过”,then 发送一条短信安抚之。

尽可以发挥想象力,实乃杀人越货居家旅行之必备。

目前有邀请五枚,先到先得,评论里留下email。

标签: 4 评论
1Jul/110

程序员之路

今天突然觉得,如果把程序员的成长之路比作游戏角色的养成之路,两者有着许多共同的地方。

进入大学,同一个专业,大家都是从1级开始,当然不排除有些同学的起点比较高,可能是3级,但是相差不那么大,还是可以在一张地图上练级的。大学这张地图给的课程任务是一样的,经验也是大同小异的,唯一的区别就是自己打怪的勤奋程度,有人做完任务就聊天休息,有人继续不停打怪练级,那么大学毕业以后,可能会有人升到了10级,可能有人是8级,甚至有些可能仍旧是2-3级。

进入社会,到公司做开发以后,大家等于进入了不同的地图来练级。到了新地图,这里开始有所区分了。不同的任务,不同的怪,经验都是不同的。原先的8级的人进入了比较有挑战性的项目组,打怪很费劲,但是每一个经验都很高,成长很快。而原先10级的人进入了比较安逸的公司,打怪很轻松,但是基本没什么经验。

若干年以后,可能原先8级的人已经磨练到了20级,而10级的人依旧只有12,13级。如果说开发的知识和工具是装备,那么不断学习到的新工具和新技巧就是奖励给你的装备,能力愈强,装备也愈好,反之亦然,相辅相成。

对于走技术路线的程序员来说,必须要不断的接受新的挑战,才能进一步的提高自己。在一块地图安逸的打怪固然轻松,但是丧失的是时间和经验。

不要等到别人都已经大灾变了,你还在黑海岸默默的杀熊。那才是人间一大杯具。

28Jun/110

都是短地址惹得祸

今天新浪微博上的微博病毒事件掀起了轩然大波,许多博友纷纷中招,点击带毒链接后,微博账户被盗用,自动发布垃圾微博,并且强制关注某个微博用户,账户安全基本没有保障。新浪紧急公告,要求网友不要点击包含以下内容的链接。

这到底是怎么回事呢?怎么点了微博的链接就会中招?这还得从头说起。

什么是微链接?

微链接是一种URL缩短服务的产物,简单的说,就是新浪提供了一种服务机制,使得用户发送在微博内的长长的网址,比如www.brandonsun.net,会被缩短成只有若干个字母组成的一个微链接,比如t.cn/xXxXxXx,当用户访问这个缩短后的链接时,新浪后台服务器自动将其展开成原来的网址并且将用户的请求转发给该网址。

为什么引入微链接?

微博短小精干的形式限制了一条微博的内容最长不能超过140个字符。引入微链接可以缩短网址所占用的字符空间,留出更多空间给真正有意义的微博内容。

为什么会有微博病毒?

这其实根本不是一个新鲜事。通过发布包含恶意代码的网站钓鱼或种马是一些不法分子常用的手段,看看各大bbs,垃圾贴广告贴举不胜举。但问题就出在微链接上,通过网址缩短的确方便了用户,但是也埋下了隐患。以往如果用户看到一个钓鱼网站或是奇怪地址的站点,比如fwwo122.com之类的域名,有一定经验的网友是不会轻易点击的。但是微链接隐藏了真实的网址从而使得普通用户无法直观的判断点击这个链接是否会有风险。

加之博友对新浪的信任,对于微博上的微链接根本不设防,导致了这次的微博病毒事件。

如何解决?

两个方案:

1. 客户端:

浏览器提供相关插件,发现用户正在点击的是一个通过URL缩短服务产生的链接时,提醒用户该链接的真实地址(通过短地址解析服务,请google,有很多),帮助用户判断是否需要继续访问。

2. 服务器端:

当用户点击微链接时,提示用户该微链接所指向的真实链接,帮助用户判断是否继续访问。

方案1一劳永逸,不管是新浪也好,twitter也好,google也好,只要是微链接,统统拿下,但是插件后端需要经常更新保证能识别各类URL缩短服务。

方案2只针对新浪,对用户来说,不是一个十全十美的方案。

27Jun/111

三体

毫无疑问,是笔者看过的迄今为止最为出色的长篇小说,没有之一。虽然第三部的结尾有点草率,弹拨者有些突兀,但是瑕不掩瑜,整部作品依旧是硬科幻迷们绝对不容错过的至尊享受。

三体三部曲豆瓣介绍:

三体一

三体二

三体三

强烈推荐!

附网上搜到的相关资源:

下载三体----地球往事三部曲

标签: 1个评论
Page 1 of 5
1
2
3
4
5