业余码农选择C#的理由

在网上看了太多又臭又长的类似文章,从方方面面夸或者黑某种语言,我选择C#的理由很简单,所以如果有和我类似情况的,我也推荐你选择C#作为开发语言。

我的情况:

1.公司提供的工作环境和客户的工作站全部是Windows环境。

2.开发程序的规模要求比较小:
比如:不会有大规模的客户端连接,也不需要数据量,负载等等,像我自己目前开发的小程序都是订制型的,客户的数量都是个位数的。

3.对C或C系列语言有些基础,比如(C,C++,JAVA等等)。

C#的优点:

1.免费,因为我写的程序虽然小,但是的确是以公司的名义提供给客户的,当然是收费的,所以选择免费的开发工具是很有必要的。而目前VS Express已经做到了完全免费,除了开发大型软件需要的功能,所有桌面级别的功能全部是免费的。

2.配置简单,千篇一律可能是专业开发人员的槽点,我上大学时也以自己搭建开发环境为兴趣,但是当我只想花一天写一个坐标转换的小程序时,VS Express这种高度集成的开发工具帮助极大,Express不支持绝大部分的插件和订制(专业版可以),但是好处是当你遇到一引起问题,你看到的问题解答中的界面和你永远是一样的,对于初学者这其实是很友好的。

3.语言的自解释,这本来是一种开发者写代码时需要注意的事项,但是我觉得.NET系列语言做得非常好,.NET库是不需要头文件的!刚开始我四处找头文件,后来发现当你引用一个库时,所有的函数及参数列表都是可见,而且所有.NET程序都可以非常简单的反编译,推荐ILSPY,这意味着你不用任何参考就可以直接使用函数,如果愿意还可以看到源码实现。(这叫强制开源吧。。。)

4.部署方便,Win7默认包含.NET 3.5,这意味着你开发的任何一个程序都可以在所有的Win7上运行,不用考虑环境设置,库的引用,而且程序非常小(我之前使用QT开发,最让人郁闷的一点就是任意带GUI的程序都要10M以上)。

缺点:

1.跨平台,很难在其他平台上使用,虽然有MONO,但是不免费。

2.库相对少,并不意味着没有,只不过当你 的需求非常专业,那么C++的历史在那摆着,库肯定多且专业,参考资料也多。
实际上C#的库比较多,但是因为自解释的原因吧,专业人员用起来肯本不需要文档,初学者就会很郁闷了。

2013年流水帐

12年没有写,补个13年吧。

首先是12年底把证领了,也算是裸婚,虽然我觉得这个词没什么意义。12年绝对是工作后最累的一年,时间管理相当差的我还为了工作牺牲了好多私人利益,教训是深刻的。结婚则是因为已经决定13年来德国,领了证才有可能申请签证。

13年1月老房东卖房想毁约,经历一些斗争,和平解决,新房东同意我们4月份才搬走。

然后就是开始折腾签证,雷声大雨点小的外派终于进入操作阶段,德国的中介开始操作所有事情,我也尽可能地在配合,预计开始的日期是4月1日,但是1月份才开始准备有点太紧了。

说是派两个人,老板也在春节公司一起吃饭时宣布了,然后另外一个一直不怎么积极的同事宣布不去了,然后闪电离职,虽然没有什么实际利益,但是对我还是好事情,至少不用给同事做饭了,我带老婆来德国还得帮同事做饭也不太爽啊。

后面的乏善可陈,德国的人事拖拖拉拉地一直不给合同,于是一直卡在这个坎上,最后4月终于把合同拿到手,我一是担心使馆耽误时间,二也是不想太赶,于是把日期改到了7月1日,没想到德国中介太NB,已经在德国拿到了移民局的批准,一周不到签证就下来了,不过还是照着我填的7月1号开始。

于是奸计得逞,虽然还是苦逼干活,但是走之前申请了两周婚假,虽然还是各种折腾行李,但是难得地休了长假。

国内的工作大撒把,话说的再好谁也不清楚一年后的事情。

7月来到德国,至现在半年了,一直在做工程师的工作,毕竟干工程师算是轻车熟路,所以还是很自在,压力也有,都是自己加的,避免自己太过放松。

德国同事比想像得热情,带我在开车能到的地方转了很多,其实也有机会自己玩,不过主要目的还是来工作,所以YY的欧洲游没有实现,德国都没出过。

德语是最大的问题,语言不能导致交流的不顺畅,工作的同事还好,大家都在国际化的环境中工作过,都能在适度的理解和宽容下工作,而且客观来说我表现得也不错。但是其他方面就没办法了,德国是单一民族的国家,Aalen还算国际化,要是去其他城市我估计我就直接挂了。

总的来说13年是调整的一年,来德国这一年休假的同时也充实了自己不少,虽然是技术上的,由于国内目前依然结构调整中,所以我的未来依然不明朗,不过14年是增长放缓甚至衰退的一年,挑战往往也是机会。

 

最小二乘法拟合一些基本空间元素的C#实现 —— (零)前言和参考资料

写这些(为了避免单个过长)文章的目的有两个,一是记录下最近工作的过程和参考的档案,避免以后忘记。二是万一有人和我有一样的问题,也许能搜到这篇文章,避免像我一样走这么多的歪路。

最近半因为工作,半因为兴趣,想实现一些笛卡尔三维坐标内的点云拟合基本元素(直线、平面、圆柱等),虽然很多软件都有非常强的功能,但是基本上都是重量级的收费工业软件,我买不起,而像我们公司的虽然我不用付费,API又几乎没有,所以也借这个机会来学习一下。

先要吐一下槽,中文的资料几乎找不到,不是一些算法课的作业和解答,就是论文数据库中付费才能看,而且不知道质量好坏的论文。不过也是这些论文拯救了我,虽然论文不免费,但是参考文档直接列在那,看参考文档往往比看这些翻译+“优化”的论文要好。

另外一个比较有用的工具是google 学术搜索,可以看到一个论文被引用的次数,后面附的一篇论文被引用了150多次,基本上是这个话题里最早的几篇论文,也是讲的最基础的论文。

另外还要感谢维基百科,一些基本已经忘记的数学概念都是通过这个想起来的,还可以当专业词典用,一篇文章切换中英文,可以极大的帮助理解。

以下是参考资料,会不断更新。

C#类:

math.net库是一个C#实现的数值计算库,在算法实现中大量实用了这个库提供的线代矩阵操作。如果使用C++,一个更有名的库是boost

msdn有任何问题和错误来msdn肯定能查到,比csdn要靠谱太多了。

stackoverflow无数次把我从绝望深渊拯救上来的人,什么问题都可以问,什么问题都有人问,几乎都会得到正确的解释和参考信息。

算法及原理类:

使用Math.NET进行线性与非线性最小二乘拟合,我最早找到的文章之一,我几乎以为单凭这篇文章就可以帮助我搞定问题。
这篇文章的优点是罗列了从基本到常用的几种线性与非线性算法,提供了比较详细的推导过程(不包括线代的定理),和所有的C#代码实现。(下载二进制源代码
不过这篇文章里只有单变量二维空间上的拟合。
使用这篇文章及代码可以了解如何使用Math.NET进行矩阵操作,帮助极大,因为其他的文章偏向于论文,往往推导出解法后连计算步骤都不给,使用这里提供的算法可以得到最后一步的结果。
我在代码中找到了一个小BUG,于是给作者写了信,作者很热心的回复并且告诉我有个中国朋友进行了翻译,这是赵毅力同学的翻译。更推荐先阅读这个版本,因为所有的基本概念都做了介绍,不用自己去查教材或者维基百科了。

无名文章,这是我正在使用而且帮助排名第二的文章,看格式像论文或者会议上的技术报告,但是没找到标题,这篇文章提供了笛卡尔空间上的线,圆柱,圆锥,球等的拟合算法,由于没找到引用信息,无法判断这篇文章的正确或者权威性,我目前看到空间直线部分,和我们公司的软件的计算结果取得一致,未来两天会继续验证。(1月23日添加,已验证直线平面和圆柱,算法正确)
缺点是这篇文章里只有基本数据的计算方法,和算法思路,稍微具体点的推导都没有。例如——矩阵A是每个点减平均算出来的,然后使用SVD对A进行计算就可以得到空间向量的解。
如果没有线代基础或者相关的算法概念会觉得莫名其妙,结合第一篇文章看就好很多了。

更原理性的一篇,这篇文章有两个版本,这篇稍老,新的没仔细看,和这个几乎一样Faithful版本,要赞一下这个Prof.论文都放到了个人网站上,省得去各个黑心网站上付费,我觉得论文这种东西写出来就是为了让大家看的,卖几十刀实在是太黑了啊。
不过对应用层面帮助不大,不过如果想对算法实现改进(例如从最小二乘至最小元素法),应该会有帮助的,等我有需求时再看吧。

另外还有几篇是针对圆柱的,因为我个人工作的需求主要针对圆柱的拟合,所以也列在这里了。

5点计算圆柱的算法,给出了详细的推导和分析,产生多种结果的原因,以及Mathematica下的代码实现。

圆柱拟合的代数算法实现

最小误差(条件)及最小二乘拟合圆柱的实现应该是一个图形库的文档,应该是基于C++和OpenGL的库,也提供了代码实现。而且库中直接实现了基本元素的最小二乘拟合实现,圆柱C++实现

blog复活

去年重新把域名换成cn后就一直没用过,各种事情折腾,不过好在数据库还留着,所以弄了一个来小时总算是大概可以用了。

来德国半年里做了相当多的技术工作,虽然不是多么复杂或高科技,但是相比于在国内时的重复性对外培训和paper work,感觉一个可以记录内容的blog还是必须的,可以适时的总结与记录工作与状态。

域名还有两年,空间也续租了,未来一年里,争取多写一些吧,也是督促自己多学一些或者多做一些工作。

心计

从来没有想过会在现在的公司里和人耍心计,不是我很傻很天真,也不是公司的人都很无私很高尚,只不过觉得大家都不傻,斗的时候不要浪费彼此的时间,侮辱对方的智商。

就像高手对决,不必要刀刀见血,两人隔空出招,谁输谁赢,心里有数。

之前离职的同事,虽然招数尽往下三路招呼,让人吐血不止,不过总还算是好离好散,这次这个完全无语了。

先是打电话给在德国出差的经理提辞职,然后透支年假,我装不知道不批准,然后和我摊牌说要辞职。心中窃喜终于让坑了,和领导商量招人替换,让她书面写辞职信。不知是想多休几天假,亦或掌握辞职的主动权,或者只是用辞职相威胁。突然又改说法了,说我正在考虑中,等我想好了我会写辞职信的。我勒个去,大姐你脑子进水了吧,你电话说了一句辞职,所有人的反应都是——辞职了?自己提的?何乐而不为呢。既然这样大家好离好散,和平分手多好,何必垂死挣扎呢?你有什么资本谈条件呢?因为你占了个人头,怕我投鼠忌器没人和你交接?

既然你出招了,我当然要还招,如果你辞职还则罢了,不辞职的话,我要打申请了,你不太适合当前的岗位,我要把你从苏州调到天津当助理去了。

在QT中调用Excel文件

这次需要处理一个文件,做一些数据处理然后生成一份报告,其实吧,画图打印成PDF神马的qt完全可以搞定,不知道领导怎么想的,也没问我,就花了大半天把报告部分用excel给做好了,我又不好意思让领导白干,只能想办法把数据导入excel。

之前用ODBC连过access文件,今天直接用这个操作excel文件,但是不知道怎么执行excel的宏,于是搜了下,找到了activeX控件操作。

照着一些例子弄了半天,始终觉得不爽,但是无论如何又找不到手册,最后终于找到了如何生成手册。

http://qt-project.org/wiki/Using_ActiveX_Object_in_QT

  1.  QFile file1(“c://sheet2.html”);

  2.     file1.open(QIODevice::WriteOnly | QIODevice::Text);

  3.     QTextStream out(&file1);

  4.     out << excel->generateDocumentation();

  5.     file1.close();

以下是在我的环境下生成的手册,windows XP , QT4.6.2

http://darksun190.com/excel_com_manual_qt.html

生活方式

最近一直在纠结工作与生活的关系,到不是纠结自己的,而是怎么样要求别人才是合理的,至少要做到相对公平。要求的太少,自己会很累,而且会造成所有人的工时不平均,要求太严,又怕反弹太大。

于是我想,其实没有哪种生活方式是对的哪种是错的,每个人的看法都不一样,每个人都可以自圆其说,与其说我的想法是对的,不如说我对于自己是对的这一点更相信罢了。

这么一想,我好像又掉进了陷阱里,某人认为8小时以外不应该工作,我认识8小时以外至少要做些必要的工作,如果他成功的影响了我的观点,那么他就可以用这个观点当论调质疑我们现在的工作与生活,进而质疑他现在受到的对待是过分的。但是,如果我能用我的观点影响他的,他所有的要求和反馈就没有了理论上的依据。

貌似我找到我现在最大的问题了,总是来一个问题,解决或者反驳一个问题,没有从根本环节上施加影响。

一个个来吧,先从年轻的来。

无题

最近感触蛮多,春节基本在睡觉,没有什么思考,这两天各种事情让我想起很多事。

这两天在头脑里一直绕的是当初被鄙视的一件事。 那时工作高不成低不就,也没有女朋友,去一个同学家做客,连吃带喝还发了不少牢骚,第二次还想去做客时,被各种理由往后拖,终于有一天,迟钝的我发现,原来我是不受欢迎的客人。对我是件好事情吧,从那开始,我认识到有人是不喜欢我的,我也开始对于人情世故有了一些敏感性。也是从那开始,我愈发觉得人与人的沟通成本太高了,逐渐开始不与人交往了。

说到沟通成本,记得有篇文章这么描述,有些天才从小不与人沟通,觉得沟通成本过高,直到走进社会,碰过一些壁后,才开始学会谦虚,学会交流。而我恰恰相反,我不是太聪明的人,所以在学校里总是和别人差不多,一直觉得自己不太聪明,等到工作后走进社会,才发现原来自己是个聪明人,至少不太傻,这时候就发现与人沟通成本太高,人也变得不这么谦虚,也不愿意交流了。

这两天和很多人生闷气,其实已经想通了,生气更像是条件反射,当我尝试做一些决定的时候,会有人跳出来blabla说一些因为这个,可是那个,我想怎么。于是我开始花几倍于我思考并做出决定的时间来解释我为什么这么做,很拗口不是么,过程更烦,我为什么要解释,我凭什么解释——因为我没有树立权威。我不想用鸡毛当令箭,我更烦这种无用功的沟通,如果让我选一样,我宁愿变成一个简单粗暴的SB领导,也不愿意浪费我自己的时间。

所以现在想一想,以前骂领导时,可能并不是因为领导是SB,只是因为自己没有他思路广泛,或者没有他思路快,想不到他想的事情。昨天前天和一个比利时人有些简单的接触,时间比较短,我还没有适应他的口音,但是在他工作暂停时,我总能第一时间提供他想要的东西,因为我了解他在做什么,他的思路是什么。 后来他说,我喜欢你的快速反应。

可是,我最近的反应有些太快了,我现在说话的速度越来越快,说事情也开始跳句子,我想,在某些人的眼里,我是不是已经语无论次了?

现在我依然没有Title,在没有名义权限的同时行使实际的权限,好处是,其他人对我没有什么等级观念,我可以听到一些真话,一些真实想法。坏处是,这些话我真不是我期望听到的。我得承认,我是一个工作狂,我不能期望所有人都像我一样对工作这样投入,也承认他们对于生活工作的态度是合理的,工作是工作,生活是生活。但是,生活总有但是,现在6个人每个人分配了600份的工作,我的任务就是让这600份工作完成。

有人说我干100份很不爽,太累了,都耽误我哄孩子的时间了;有人说我不想出差,只想干本地的这50份工作;有人什么都不说,只是干了50份就不干了,我总不能自己把剩下的都包圆了吧。

本来,6个人1人100份,公平合理,你能力强,很快干完,能力弱,稍微加班也不用太过份,现在都搞消极怠工。有人两周没出差,让他出差时这有事那有事,周四晚上要送老婆开学,我两个礼拜没回家了,我有心情听你讲述你的甜蜜爱情故事?有人干了三年还不如个刚毕业半年的应届生,我飞过来1000多公里干活顺便教你,你和我说无锡苏州昆山之间太折腾,就想待在苏州,我笑呵呵的劝你想开点,你真以为我对你没有杀机么?

时间是一把杀猪刀,我本来是一个有求必应的滥好人,现在既然被推到这个位置上,那么动手也是早晚的事情了,就看谁让我练手了。

2011年流水帐

看到不少人写流水帐,开始没想凑热闹,还觉得有点无聊,但是想想这玩意是写给几十年后的自己看的,也就有点意思了。

1月,去年12月刚刚和领导抱怨工作强度,1月份工作处于微调,算是半放假,几乎就在京津,于是天天发牢骚同时也就把情绪缓和下来了,不过闲了下来,更增加了碎碎念的程度。入手itouch一个给女朋友,也算追了把潮流。

2月,月初就是春节,春晚成了大家吐槽的对象,11年的春晚的吐槽点更是出奇的多,保持这个风格,为了吐槽也会有人坚守看春晚的。1月底工资到手发现工资又多涨了点,和领导抱怨的目的并没有达到,但是涨了点工资平衡了一下,不过依旧不爽,一直还是想跳槽。

3月,悲剧的开始,整个3月份在飞机上度过,青岛,天津,兰州,宁波,黑龙江,湖南,于是开始玩街旁,到一个地方签一个到,疲惫不堪。

4月,继续悲剧,大连,上海,成都,北京,西安,北京,到月底实在忍受不住而爆发,和秘书吵,虽然是领导安排的,但是没办法直接吵,于是闹情绪,月底长休,其实是清明假期的倒休。女朋友开始学车,月底租的房子又要到期,今年压力最大的一段时间了吧。

5月,清明加班,五一加班,倒休的时候没叫走加班,和领导抱怨完许完空头支票继续全国飞,其实到不是干活不爽,是分的区域完全摆设,在湖南株洲又待了两周,真不行了,吃不惯,环境差,借搬家的事继续完成上次的倒休。这时要跳槽的心意很坚决,想拿完年终奖开始找工作,凑够五年工作经验就换。

6月,搬入新家,房租一年比一年贵。虽然依旧很折腾,但是相比前三个月有了很大的缓解,不过生活总是很狗血,总有事情让你惊喜,这个月被女朋友的爹逼婚,还质疑我编造我的收入,加上以前质疑我编造自己的学历,结果闹的很不愉快。

7月,深圳2周,荔枝的季节,很爽,北京一周准备工作,然后就是西安宝鸡,噩梦的开始。

8月,几乎都在宝鸡,中间被叫到上海三天,其实到现在我也搞不懂当初为啥把我全国调来调去,照我现在的眼光来看,是想逼我走么?不像啊。在宝鸡做的算是项目,不过结果很差,凭心而论,我做的东西还不错,效率也很高,但是碰上垄断国企+想做政绩的领导+想学东西的初学者,直接导致这个项目的悲剧结果。回家歇了两天后,继续去东莞写代码,和广州的同学叙了下旧,又是折腾的一个月。

9月,沈阳展会,北京写代码,株洲解决遗留问题,广州展会,大连新机器验收,又是穿越中国的一个月,必然导致心情不爽,不过领导之前许的空头支票居然要兑现,于是放弃抱怨,患得患失起来,后来发现根本不必想,也许被人当枪使几个月就扔了也不一定。

10月,十一加班,大连,北京,沈阳,张家界年会,宝鸡擦屁股,上海开会。总的来说,应该是心情好的一个月,因为虽然没有正式的title,总算给了个名分,理论上的主管,不过手底下只有5个人,且其中的2个人分别在一个月和半年后调走,还有两个也不一定,所以说是光标司令也可以。另外不良习惯导致的龋齿开始疼,最后杀了神经,发现我的牙基本上报销了,结果一个月都在和牙疼做斗争。

11月,过渡期,其实还是在做工程师,脑子里没有当领导的概念,去洛阳居然误了飞机,最后坐通宵火车赶到,然后又是包头,天津,宝鸡,终于和宝鸡的初学者操作员闹翻,自己的原因我肯定看不出来,那哥们的缺点是自视甚高,于是喜欢创新,但是都是错的,当时很纠结如何完结这个case。

12月,逐渐进入新角色,不过方法上还有问题,还是以了解情况居多,面试招人,带新人,由于新手太多,所以没办法继续全国跑,于是又积攒了一堆压力,到月底又暴发了一次,暴发过后自己也有了转变,屁股决定脑袋,古人诚不欺我,开始四处战斗,和领导斗,和销售斗,和秘书斗,和手下斗。同事出意外,特别开朗的一个女孩去世,打击也很大,比我岁数还小的一个人。最后,和宝鸡的操作员决裂,这是我第一次发自内心的讨厌作为个人的客户,以前只是讨厌作为客户角色的某个人,但是这次是我对他个人的藐视,从人品到学识,从见识到待人接物,没有丝毫亮点,同时,我也很同情他的个人遭遇,如果他没有什么背景,他这种性格和做事方法这辈子就算到这了。

总的来说,11年是转型之年,从决心跳槽到决心留守,从工程师到见习主管,从技术岗位向管理岗位。自己改变了很多。