随笔分类 -  .NET

验证码识别思路
摘要:因为某些原因,最近写了个不停注册某网站账号的chrome扩展。(算外挂吗?) 该网站注册时需要输入验证码,且单次有效,所以穷举不可取。(验证神马的,最讨厌了!)================================================================ 首先要确定验证码图片是实时生成的还是只是静态图片,收集大量验证码看看是不是有大量相同的: 最近erlang代码写得比较多,就用erlang实现了,至于存储,直接放磁盘算了。-export([start/0]).start() -> inets:services(), inets:star... 阅读全文

posted @ 2012-02-26 05:48 neutra 阅读(41733) 评论(5) 推荐(1)

C#也玩尾递归(续)
摘要:大约半年前,我写过一篇文章《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 阅读(3296) 评论(3) 推荐(1)

C#也玩尾递归
摘要:昨晚看到装配脑袋的一篇文章《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 阅读(3081) 评论(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 阅读(1437) 评论(0) 推荐(1)

以线程安全方式引发事件(修正)
摘要:《CLR via C#》3rd中提到,应该以线程安全的方式引发事件,不禁冒冷汗,一直以来还真没注意到这个问题,以前写的不少代码得重新审查修正了。下面是引用原文说明:.Net Framework最初发布时,是建议开发者用以下方式引发事件:[代码]这个OnNewMail方法的问题在于,线程可能发现NewMail不为null,然后,就在调用NewMail之前,另一个线程从委托链中移除了一个委托,是New... 阅读全文

posted @ 2010-10-13 01:14 neutra 阅读(1302) 评论(7) 推荐(0)