摘要: 大概是2000年的时候,我有了第一台计算机。那时电脑才刚刚普及,价格还是比较高的,我记得好像总价是5k5,那是七喜很低端的一款,赛扬400、64M内存、4G硬盘,在我的要求下升级到了128M内存和10G硬盘。其实我父母当时根本对电脑没任何概念,只知学这玩意对以后很有帮助,买电脑对当时我家的情况来说并不是一笔小的费用。只是再多的钱对于当时的我来说还只是一个数字,直到后来我才知道其实这不是一个容易的决定。所幸的是这部电脑产生了足够的价值,至少影响了我这十年的很多选择。刚开始接触电脑的时光令人难忘,因为我在头一个星期几乎天天都在重装系统。原因无他,就是我乱删Windows下的文件。在重装了几次系.. 阅读全文
posted @ 2011-11-17 03:23 neutra 阅读(474) 评论(1) 推荐(0) 编辑
摘要: 大约半年前,我写过一篇文章《C#也玩尾递归》,里面介绍了一种技巧使得C#也能实现尾递归,不再像普通递归调用那样受调用栈的限制。 今天重新看了下文中最后的实现代码,感觉还是不够满意:因为引入了一个对用户来说不是很必要的数据结构RecFunc<>,用户需要定义的代码大概是这样:(rec,i,n,a,b) => (n<3 ? 1 : (i==n ? a+b : rec.Callback(i+1, n, b, a+b))) 从调用方的角度来看,下面代码就比上面的更容易理解(不用self都不好意思说自己学过python):(self,i,n,a,b) => (n<3 阅读全文
posted @ 2011-07-27 22:49 neutra 阅读(3268) 评论(3) 推荐(1) 编辑
摘要: 近几个月太忙,一直没更新,过几天准备人生第一次离职,有很多感触,跟大家分享下。 在很多人眼里,目前我的工作挺好的:虽是小公司,但工作压力不大,自由时间较多,作为老员工,薪酬地位都不算低。 在我眼里,目前公司最突出的问题是: 1.开发人手严重不足,却不肯放弃任何项目机会; 2.缺乏长远计划,即使制定了计划也是朝令夕改; 3.以项目需求引导产品开发,开发人员虽有交流相互不够信任。 有人觉得是管理制度问题,有人觉得是开发模式问题,有人觉得是软件建构问题,我觉得根本就是人的问题: 1.上头不懂开发却随意影响开发,下头虽不满也得照做,做出来的东西又不能让人满意,上头又琢磨哪个环节出了问题,陷入恶性循环. 阅读全文
posted @ 2011-06-28 01:49 neutra 阅读(1442) 评论(7) 推荐(2) 编辑
摘要: 我经常搜集些小图片,网上的图片往往都有水印(特别是现在微博发的图片,几乎右下角都有水印)或者比较小,经常会有想找图片原始的版本的冲动。最近我才发现原来百度有个识图搜索,可以搜索出相似的图片,目前还是测试版,成功率不高,不过在很多场合还是可以派上用场的 :)PS: Google的Goggles似乎也可以识图,不过只见到手机终端软件,不知Web上能否调用。目前百度识图在使用时需要登录它的网址,然后要上传一幅图片(<5M)或输入图片的网址,才开始搜索,整个操作比较麻烦。于是打算做一个Chrome的插件,给网页图片的右键菜单添加一项,单击自动搜索相似的图片并显示在新的标签页里 :)之前没做过这方 阅读全文
posted @ 2011-03-20 00:33 neutra 阅读(2003) 评论(0) 推荐(0) 编辑
摘要: 昨晚看到装配脑袋的一篇文章《VS2008亮点:用Lambda表达式进行函数式编程》,介绍了使用Lambda表达式实现递归的一种方法,从评论得知C#下使用特殊的委托也可以实现类似的效果,深受启发,联想到Python中使用抛异常的方式也能实现尾递归,于是尝试着给C#也弄个尾递归的包装来玩玩,纯属娱乐:)Lambda表达式可以代表一个函数,如 Func<int,int> func = n => n + 1;由于C#不能用var来推断Lambda表达式的类型,即使C#4也不能用dynamic声明一个Lambda表达式,结果当Lambda表达式的输入输出都是Func<...> 阅读全文
posted @ 2011-02-19 18:39 neutra 阅读(3056) 评论(5) 推荐(2) 编辑
摘要: 类型成员的可访问性(Accessibility)的作用,就是控制类型成员对外的可见性。C#支持5种可访问性修饰符:public,private,internal,protected,protected internal,其中protected internal对应于CLR中的Family or Assembly,另外CLR还支持Family and Assembly的可访问性,只是C#不支持。反射... 阅读全文
posted @ 2010-12-03 09:11 neutra 阅读(1411) 评论(0) 推荐(1) 编辑
摘要: 《CLR via C#》3rd中提到,应该以线程安全的方式引发事件,不禁冒冷汗,一直以来还真没注意到这个问题,以前写的不少代码得重新审查修正了。下面是引用原文说明:.Net Framework最初发布时,是建议开发者用以下方式引发事件:[代码]这个OnNewMail方法的问题在于,线程可能发现NewMail不为null,然后,就在调用NewMail之前,另一个线程从委托链中移除了一个委托,是New... 阅读全文
posted @ 2010-10-13 01:14 neutra 阅读(1281) 评论(7) 推荐(0) 编辑
摘要: public bool Success{get{ Console.WriteLine("start"); var chance = new Random(DateTime.Now.GetHashCode()); while (chance.Next(1000000000) != 0) { //Console.WriteLine("give up"); //return false; } Conso... 阅读全文
posted @ 2010-09-18 00:40 neutra 阅读(261) 评论(0) 推荐(0) 编辑
摘要: VS可以指定[assembly: AssemblyVersion("1.0.*")]这样的版本号,每次编译程序集时自动递增Build和Revision。今天同事说到这个自动递增的Revision对于查错作用不大,建议用SVN版本号作为程序集的版本的尾号。我觉得很有道理,于是在上网里查了下方法,比较遗憾的是只查到一篇文章(雷同不算)《通过 TSVN 自动更新程序集版本信息》。  文章里介绍了方法比较复杂,大致如下:  1. 做一个包含[assembly: AssemblyVersion()]的模板  2. 写一个批处理脚本。脚本通过查找注册表定位到TortoiseSVN里的一个小工具SubWCR 阅读全文
posted @ 2010-09-16 00:42 neutra 阅读(2973) 评论(0) 推荐(0) 编辑
摘要: Array.Sort有N个重载,都是调用同一个方法实现排序(Array.Sort<T>先不管)其中跟排序有关的代码有三处SorterObjectArray和SorterGenericArray都是Array的内部类,还有个是TrySZSort方法。TrySZSort方法从签名来看应该是调用外部非托管的代码。也就是说,当没有自定义的Comparer对象时,Array优先尝试调用非托管代码... 阅读全文
posted @ 2010-07-02 21:58 neutra 阅读(3209) 评论(0) 推荐(0) 编辑