自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

思考使人沉静

for myself

  • 博客(38)
  • 收藏
  • 关注

原创 恐龙技术生存体验(五 峰回路转)

毕业找工作时纠结了一番,因为同学们几乎都去了互联网bat之类,出路都很好。我作为老家伙,有点不好意思和他们同台演出。而实习的公司想留我,说有一个推理引擎的项目要做。这个公司还是传统的航空航天军工口的,我很不想继续做老本行。谈了一下offer,不满意就拒了。接着就思考了一番,觉得自己对这种东西很感兴趣,和编译器虚拟机很接近。拷问自己,如果自己有很多很多很多钱,我会怎么生活?我的回答是去个公司做自

2017-01-01 16:42:09 656 1

原创 恐龙技术生存体验(四 大开眼界)

回顾我在研究所的几年工作,技术上的收获就是端正了工作态度,树立了质量意识,了解了行业背景,学习了开发知识。但是那时基础不牢、能力不足,工作中时常迷惘,不知如何如何解决问题。抱着解决这些问题的期望,我在本科毕业后的第四年,离职去读了研究生。本来想换个方向换个领域,但是很不幸的还是去做航天课题,要做一个跑在卫星上的软件。虽然不知道以后要干什么,但是我知道基础很重要,选课的时候我挑了很多基础理论

2016-10-24 04:26:14 776

原创 恐龙技术生存体验(三 眼花缭乱)

于是我工作后终于发现了第一个朴素的道理:不能正确运行的程序是垃圾。之后做过几个离线数据抽取软件和实时数据处理模块,处理各种卫星数据的时候,发现功能完全一样,只是格式不同而已,怎么破?听说面向对象比较好,我也研究C++的继承、多态的概念,写程序的时候搞一个父类,不同的卫星去继承。听说设计模式很时髦,我也买了书研究,每个字都能看懂,就是不知道说了啥。GOF,骗子。接手升级过一个有奇怪名字设备的

2016-10-17 22:16:41 607

原创 恐龙技术生存体验(二 初出茅庐)

我在北交大上本科时,读的是一个计算机应用的专业,程序语言学了VB、Java,学了一点网络、数据库,虽然很多CS基础课程都没开,但是学了一坨经管的课,做了一些MIS/ERP大作业。一心向往计算机系,去那里旁听了些课,四年过去了,懵懵懂懂。后来毕业就去了航天院所了。刚开始的感觉就是莫名其妙。像我这样的野生二半吊子软件工程师水平真的很菜,上学时做的某某系统都是企业应用,在工作里根本用不上。虽然同

2016-10-11 15:47:08 493

原创 恐龙技术生存体验(一 引子)

每当听到“千万别学C/C++”、“要学C#/Java/PHP”、“MFC早就淘汰了”的话,总是“虎躯一震,菊花一紧”,这些东西的确早已普遍被认为是陈年旧货,市面上也极少有人讨论了。作为一个有十多年的软件从业者,还一直用着这样陈旧的工具和技术,我们这些人难免被认为是步履蹒跚的恐龙,行走在最后的大路上。这是真的吗?这样的生活是一种什么体验?

2016-10-02 17:15:23 393

原创 关于产品定义、架构和设计实现的一些想法

碎碎念,自己总结一下。一、怎么定义产品?好的产品自然是“设计”出来的,而不是树上长出来的。“设计”这个词很虚,我试着分解成定义、架构和设计实现三个过程。产品的定义就先从产品的使用来看吧:无论什么样的产品都有I(输入)-P(处理)-O(输出)这三大坑,好产品的功能很强大,性能很优越,输入输出方便、直观、容易理解。但是,一般而言,越是功能强大、性能优越的产品,它的P坑是非常复杂的,因为强大

2016-08-15 00:40:08 1194

原创 职业倦怠了吗

小时候 老师问我们,将来想做什么有同学回答 警察、科学家……很多年过去了我工作了几年迷茫不知自己想做什么然后辞了职,去考了研究生或许心里想,再多花几年时间,就能找到路了那时,心想当个科学家也不错后来,我为了搞清楚自己到底想做什么问自己一个问题:如果我有很多很多很多钱我会怎么生活?硕士毕业后,我的回答是:当个小工程师,做自己喜欢的技术。然后就一

2016-05-21 22:34:57 491

原创 辞旧迎新,我的2012

一年的工作,一年的生活,几多欢乐,几多感慨。这一年,我为公司做了两个很有意思的软件。一个是专家系统,一个是系统建模工具。冲刺撞线后短暂的欢乐抛在身后。这一年,我做了想做的工作,是时候了;这一年,我锻炼了自己的能力,是时候了;这一年,我为公司创造了价值,是时候了……我是谁,我要做什么?自己的想法,可实现否?

2012-12-31 22:58:03 626

原创 一个软件移植工作的总结

上个月终于完成了一个专家系统的移植工作,移植到实时系统中用于实时故障诊断。我分析了系统的难度和复杂度(110k+行代码),连同别人的预估,综合起来最后报的计划是7-8个人月,但是由于涉及的领域都是我感兴趣的,并且有研究基础,所以工作效率比较高,实际用2个月多一点就完成工作,下面分阶段总结一下过程中的经验。1、可行性分析,制定计划。凡事预则立,不预则废。话虽如此,如果不对系统有一定程度的理解,是

2012-05-28 01:37:16 1882

原创 在公司做技术预研工作?

之前做过软件开发和一点技术管理,然后回学校读了研究生。课题空闲之余去公司做过预研+开发,毕业后干脆在公司做预研工作。目前对工作比较感兴趣,但也有点找不着主线似的惶恐。在网上查了一些关于技术预研的的资料,记录一下。技术预研:技术预先研究,TPR跟踪国内外技术发展,分析技术发展趋势。跟标准,推提案,参会议,写专利预研项目:有具体的形态和应用背景的产品作为目标技术预研:在产品规划的指引下,难

2012-02-07 23:32:41 20378 2

翻译 翻译VxWorks Flash文档一部分

<br />8 Flash存储区块设备驱动<br />——可选的组件TrueFFS<br />8.1引论<br />Tornado的TrueFFS是一个可选的产品,它提供了对很多Flash存储器的块访问接口。TrueFFS是一种与Vxworks兼容的M-2.0系统的应用实现。这个系统是可重入的(reentrant),线程安全,并且支持所有的只要能运行Vxworks的cpu架构。<br />本章首先简要介绍flash存储器,接着一步步的概述如何建造TrueFFS系统。然后详细介绍这些步骤,包括对编写你自己的s

2011-06-02 15:42:00 3791

翻译 软件动态更新技术总结之1 CIL:程序分析与变换的中间语言工具(sec0-sec3)

前言      更新软件的传统做法是首先关闭旧版本软件,安装新软件,最后启动新软件。如果是对可靠性实时性要求低的软件,这么做是可以的。但如果对需要提供连续服务的软件做更新,重启系统通常是不容许的,重启系统会造成服务中断,运行时状态和数据丢失等重大伤害。      我们需要对软件动态地更新,让软件在运行过程中完成版本的更替,状态数据的保存恢复,并且,不需要额外硬件的支持!很棒,是吧?(可以联想到云计算了)国际上对软件动态更新有很漂亮的研究和实现,我随后会有详细介绍,所以就有了软件动态更新技术系列文章。很久以前

2011-06-02 15:24:00 2481 3

原创 C类型表达式一例

<br />有人关于如下代码为何编译出错不解:#include<stdio.h>main(){    char a[][5] = {"abcd", "efgh", "ujkl"};    char (*p)[3];    p[0]=a[0];    printf("%s/n", p[0]);}<br />解释如下:<br />a的类型为<br />a : arr ( 3, arr ( 5, char ) ) 可以读作 a is arr(3) of arr(5) of char<br />p的类型为<br /

2011-04-09 11:51:00 737

原创 程序员面试宝典。。。突破心理防线

今天偶然看见有朋友书架上有一本程序员面试宝典,前四章非技术,没仔细看。从第五章开始。习题的确是抠得很细但不小的内容。第5.4节是类型转换,这里考的是类型提升type promotion。题目如下:#include using namespace std;int main(){unsigned char a=0xA5;unsigned char b=~a>>4;printf("b=%d/n", a);return 0;}作者给出的结果是对的,不过解释错误。“对于第二个问题:因为“>>”的优先级高于“~”,这个

2011-04-08 20:30:00 649

原创 近期总结(下)

<br />近期总结(上)是以前写的,一直没blog。今天与近期总结(下)一起blog吧。<br />  这一段时间精读了flex&bison,精读了一篇编译器实现的老文章。然后dsu要加点程序分析和变换的东西,就精读了些框架和实现。看得很累。自己做了个分析工具,能够检查出疑似不可dsu的东西,但是还没做程序变换。看论文看的很累,看到好多不懂的东西就很着急忙慌的去学,到现在虽然做了初步的工作,但心情还是不好。<br />  然后回过头又去看好萝卜(holub)先生的compiler design in c,

2011-03-27 16:08:00 585

原创 近期总结(上)

系统软件是最复杂的4类软件:操作系统、编译器、数据库管理软件和协议软件。在学基础理论的同时,需要将理论与实践相结合,就一定要提高自己的设计实现水平。在看一些静态分析的材料时,知道他们讲的头头是道,可是究竟怎么验证、如何实现?首先需要理解第三方的编译器或者分析系统的框架,然后在其基础上做一些修改。充分理解别人的设计、实现和技巧是很困难的。开始时看一些“轻量级”的编译器就会比较艰难,后来去找了一些分析框架仔细看了个把月,发现既难(他们通常用函数式语言,开发和调试环境不太熟悉)又不完全符合功能需求,这个框架太难,

2011-03-27 15:38:00 816

原创 Donald Knuth教授寄来$0x1.00支票了。。。

对,就是大名鼎鼎的计算机程序设计艺术(TAOCP)的作者,Knuth来信了。因为我发现了taocp习题的一个错误。这是一件好事,另一件事是坏事,就是我今天刚刚得知马上要开题了。。。。这几乎不可能,但我也曾经预见到。所以以后要提高警惕了。我做的项目远离其他学生,在另一个实验室里,我老板不管理我,然后带我项目的老师(不是我实验室的)也没告诉我要开题了。于是耽误了好久啊。。。。可见,我的定理有起作用了:能预见到的最坏情况通常能发生。我下一个可预见的问题就是毕设会有麻烦,但愿能给我敲个警钟啊。。最近没搞dsu,而是

2010-11-10 23:20:00 4414 3

原创 dsu之四

<br />这个问题很久前就close了。我用了一个狡猾的办法,但是还有缺陷,对开发有一些额外要求。所以最近在看一个大牛的解决方法。如果可以,就根据人家的方案做一套toolchain(工作量很大,胆颤。。。)

2010-10-26 20:57:00 792

原创 从数学恐慌症中恢复

现在贴有“计算机”、“软件”标签的知识太多,让人无所适从。几年前我很关注那些冠以“xx沉思录”、“xx之道”之类的东西,很快就觉得疲劳而没有收获,在工作实践和理论研究中都收效不大,很遗憾既没有“沉思”也没有得“道”。后来就听说算法才是“王道”。但是究竟什么知识可以归为算法呢,应该怎么学呢?稍微看一点算法,就知道算法是与数学紧密结合在一起的,而且许多“problem”本身就有漂亮的数学解。当然还有人说“problem solving”才是王道。(据说AI被搞臭了后就才被改名为problem solving)p

2010-10-26 20:48:00 1148

原创 dsu之三

确定函数的调用依赖关系,据说可以很简单的——如果用gcc编译器——只要改一个编译开关,不过对于diab编译器来说就有点麻烦,没有这么直接的办法。我想了两个方案,若f调用(依赖)g,1、已知f求g;2、已知g求f;从两个方向解决这个问题。1、已知f求ga)打开-x129开关,为每个函数生成一个.txt分割段;b)查符号表中Name=f的st_shndx,let it be x;c)查段头表Inf=x的名字,let it be z;d)在名字为z的重定位表中查Sym.Num,let it be M;e)在符号表

2010-07-16 23:57:00 718

原创 后知后觉-观sicp

<br />当我看到sicp P25里计算Fibnacci的一种迭代计算方法<br />a<-a+b<br />b<-a<br />明显是错误的,或许我们应该只领会精神就可以了?<br />正确的应该是<br />tmp <- a+b<br />b <- a<br />a<- tmp<br />所谓sicp就是那本著名的MIT曾用教材—计算机程序的构造和解释。我在买之前真的应该先在图书馆看一看的。<br />个人总结买书有两个经验:<br />1、通常越有价值的书价格越便宜;<br />2、应该买带习题答案

2010-07-13 18:27:00 1255 2

原创 dsu之二

<br />继续考虑动态更新。想想看能不能用代码插装(code instrumentation)的办法解决?看到了很多实现,有John Panzer的99年(!)在C/C++ Users Journal发表的Automatic Code Instrumentation。里面用到了vc编译器的一个特性,打开-Gh开关后可以插入一个_penter函数,然后通过_penter可以做出自己的_pexit,这样就可以在进入和退出函数时插入代码。因为代码插装通常都用在性能分析中,所以可以加上计时的代码。动态更新不用这么

2010-07-12 17:00:00 951

原创 dsu之一

摆在桌上的文章有只有11页长,是关于所谓动态地软件更新。摘要关键字1引论2相关工作3结构3.1仓库管理器3.2映像管理器和内存管理器3.3引导装入器4模块化与依赖分析5动态代码更新5.1对函数的引用5.2活动的函数5.3调用栈上的函数5.4变量的更新6结论和当前状态引用从3开始,我认为有启发的思想就是对功能的抽象,他们根据不同阶段的功能抽象了6个-er——ELFextractor,  RepositoryManager, MemoryManager, Linker, Image Manager, Bootl

2010-07-12 16:40:00 2456

原创 归纳法之名人问题

<br />黑土说,什么名人,就是个人名!<br />这里的名人,不光是个人名,还是个孤陋寡闻的家伙呢。<br /><br />名人问题<br />定义:在所有n个人中,一个被所有其他人知道但却不知道别人的人。<br />如果存在这样的名人,找出来。<br />判断张三是否知道李四的唯一办法是提问(查询)张三:“你知道李四吗?”。<br />这是找有向图G<E, V>中的度为|V|的汇点。如果获得了G的邻接矩阵,那就是查找<br />出度=0且入度=|V|-1的点<br />但是获得邻接矩阵的代价太大,因为

2010-07-08 11:17:00 2395

原创 归纳法之导出子图

<br />

2010-07-08 09:59:00 1389

原创 1.3.1

14. For each MIX operation, consider whether there is a way to set the ±AA, I, and F portions so that the result of the instruction is precisely equivalent to NOP(except that the execution time may be longer). Assume that nothing is known about the content

2010-07-06 21:43:00 631

原创 归纳法之找1-1映射

首先知道f|A时:f是1-1映射f是单射f是满射然后再归纳:若已知P(n-1)(f作用在n-1个元素的集合中,求解的办法),那么在P(n)时,观察所有元素的原象,若所有像都有原象,则f作用在这个n个元素集合An是满射,故1-1映射,并且S=An;否则,若存在像Xi无原象,则f作用在An上一定不是1-1,问题的解一定在f | (An-{Xi})中,而这个(n-1)规模的问题按照归纳假设是已知的P(n-1)。思路清楚了,如何表示集合是很灵活的(很难选择),其实有更好的想法,下面是实现:因为解的关键是消除原象数=

2010-07-06 14:43:00 997

原创 归纳法之找max&min

归纳:若已知P(n-1)(n-1个数的max和min),当n时,X[n]需要与max和min分别比较,才可以获得这个序列的max和min.T(n) = T(n-1) + 2,T(1) = 1, T(2) = 1ð      T(n) = 2n-3但是,如果直接用比较法去寻找,找到max需要n-1次,找到min需要n-2次,总共2n-3。所以用这样的归纳并没有加速。进一步考虑,把每次处理的数据增多一点,每次处理2个数。则,若已知P(n),先比较X[n]与X[n+1],较大者与max比,较小者与min比,总共三

2010-07-06 14:42:00 531

原创 基础概念之数学基础

<br />把1.2.10之前看完了,1.2.6之前的共166道题都做了(除了45级以上的)。做到1.2.6的二项式系数、1.2.7的调和数、1.2.8Fib数,真是让我火大。我浏览了vol 4——所谓knuth最喜欢的组合算法,内容极其丰富,习题众多,但是对于他这么喜欢的题目,6、7、8的正文里只是罗列了许多公式但不给证明,而是放到习题里;他一定意识到了这样写是不漂亮的,所以才有了在CMath前言里的话。<br />然后我去图书馆借CMath,发现为了向沙河调拨而闭库,下周一重开,只好回来看ebook发现

2010-06-26 16:22:00 781

原创 Hello, taocp.---踏实&&分析

knuth的所谓taocp是很久以前就被膜拜的算法好书,7、8年我看到其电子版后心想不过如此,认为里面的数学和复杂度分析并不难,无非是些初等代数、微积分、数论、图论,简单的组合数学、一丁点线性代数或概率,只怕是徒有虚名而已,于是把它束之高阁,拖到一个偏僻的文件夹里,继续搞一些实用和时髦的东西。转眼这些年过去了,我继续着我的浮躁,却感觉有点累。回过头来感觉自己还是头脑空空,觉得自己在做很多事情的时候是凭着经验,根本不愿,也不会动脑分析。taocp的正文很简单,事实上每节正文几乎都曾经在其他学科学过,现在看只是

2010-06-14 17:03:00 1777

原创 ex.1.2.4--7-28

<br />

2010-06-14 14:24:00 788

原创 用飞信免费短信接口编写小工具

我有时需要编译大程序或做一些运算,计算机处理数据时间比较长,这时很难说服自己去做别的事情,经常眼巴巴地瞅着计算机,心急如焚。即使放下这个活去做别的事情心里也不踏实,经常时不时地回来看看计算的情况。如果能有一个简单易用的办法及时告诉我程序处理完毕就好啦。后来我发现了http://sms.api.bz/这个飞信免费短信的接口平台,用这个平台可以轻松发送短信通知自己。因为觉得这种需求可能不大,所

2009-12-04 20:22:00 867

转载 不差钱考研版之《不差分》

教育部:来来来,我问问你,今年你们改卷,这个分数统计,平均能多少啊?34所:     二三百吧。教育部:二三百?啊,这么低。给!科研经费!34所:     哎呀妈呀,教育部你真敞亮,你太帅了!教育部:呵呵,我跟你说这不白给啊!一会普通本科到了这,你一定要给足我面子,明白吗? 我说分的时候呢,你得替我兜着点。34所:     咋兜啊?教育部:即把面子给了,不能让人家说我们出题没水平,但是呢,分又不能

2009-03-20 17:01:00 663

原创 常见的代码侵入方法

 侵入性的对他人程序的修改,第一类 dll侵犯1 注入DLL。1搜索到宿主进程的ID,获得ID后,在宿主进程中可以进行的操作有:对内存空间进行操作,如VirtualAllocEx, VirtualFreeEx, ReadProcessMemory, WriteProcessMemory。CreateRemoteProcess创建线程调用宿主进程的函数或者系统函数。2在宿主进

2009-03-04 12:23:00 5746 1

原创 One torture

   Its about a mistake I blundered when I worked for a aero-related company. We were lack of equipments which hadnt been made or data hadnot been designed entirely to test codes.  So I had to admi

2009-03-03 15:59:00 771

原创 Never be fooled

Q:  How many numbers are there in [1, 2000], which cannot be divided by neither 6 nor 8.  /* Q: How many numbers are there in [1, 2000], which cannot be divided by 6 and 8? */#include /* return leas

2009-03-03 15:57:00 668

原创 快与慢

 a、老板让你最快的计算 f(N) = 13+23+…+N3。逐项计算当然是可以的,如果能直接算出来当然会大大加快电脑计算的速度。实际上f(N) = (1+2+…+N)2 = N2*(N+1)2/4。 b、Josephus(约瑟夫)问题。这是个老生常谈的话题,大意如下:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;

2009-03-03 15:48:00 806

原创 用IO完成端口提高读写速度的探讨试验

Ⅰ 问题提出:我在写硬盘时通常采用简单的同步IO技术,这可以解决多数工作中的问题,所以并没有注意使用异步模式。后来对一个盘阵进行测速时,发现用我们自研的测速工具的测试结果达不到从高速数据源接收记录数据的要求,而对其用Iometer测出的速度则很理想,可以达到项目要求。据我所知IO完成端口适用于小数据量快速并行处理的场合,比如网络服务器。对于大数据量(大于4G)的应用未知。于是决定用IO完成端口

2009-03-03 15:39:00 5196 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除