Protected: 不就是过节么
速成WOW插件DEBUG-[CWLK-3.3.5-Runevolution]
最近在WOW,国服终于开ICC了嘛,怎么也得去见阿傻子一面。10人团已经开到小阿面前,作为一个DPS DK,深感和上一版本的差距,于是从邪血二天一洗成双持传染冰。但这鸟天赋打起来实在太累人,于是就开始寻觅一个符文+疾病+buff的监控插件。还真被我找到个合适的,名字就叫~当当当当~Runevolution。
=== 以上都是废话 ===
这插件有个问题……第一次进是OK的,退出游戏再进后就各种报错,各种google无果之后决定自助解决……毕竟我还是个码农的嘛。
于是先看报错日志,接着翻插件代码,看配置文件,查API。最后终于被我发现Orz的作者把父框体结构直接存入了配置文件,而实际上只应该存放父框体的名字就好了……于是妥妥的加上:GetName()就妥妥的好了,起码看上去是好了,因为咱是速成的所以也不知道有没有后遗症。
总之附件在此,送给Google。Runevolution-3.3.5
原来身份证号是可以自我验证的
在Google Reader上别人share的文章看到的,二代身份证号码可以通过一种机制去验真。同样道理的也可以基于这种方式生成伪造的身份证号码,只不过也只能逃过本地验证,联网验证肯定还是死翘翘的。
蛋疼Groovy练手一段:
id = "787416969231782985"
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] as int[]
results = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2] as String[]
sum = 0
factors.eachWithIndex { factor, i ->
sum += (id[i] as int) * factor
}
id[17].toLowerCase() == results[sum%11]
各位如果和我一样蛋疼的也可以把id换成自己的身份证号码run一下看看是不是正确。另外附上同样蛋疼的生成脚本一段:
id = ""
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] as int[]
results = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2] as String[]
sum = 0
random = new Random()
factors.each {
ide = random.nextInt(10)
id += ide
sum += ide * it
}
id += results[sum%11]
Project Lombok给力的new feature
唔 刚SJ同学推荐了下Project Lombok的新特性,看了下果然V5啊,从此可以和那些乱七八糟的类型声明说byebye了(虽然只是某种程度上)……
简单来说呢 就是用了Lombok后腰不酸腿不疼走路也有劲了我们就有了val,可以像这样:
val map = new HashMap<String, Object>(); // 这东西等效于这样 final HashMap<String, Object> map = new HashMap<String, Object>();
看上去就像scala类型推断似的!但其实没那么强……只能推断你的初始化表达式的类型,而且现在只支持local variable和for each loop中的声明。
真相在这里->Project Lombok,对IDE的支持现在是eclipse和netbeans(with bugs),以及构建时对maven的支持。
BTW:0.9.3的stable包里没有val,在0.10.0-逼她2这个perview包里
一个很简单的JavaBean Validator
前几天和同事聊到对于复杂表单提交上来的数据需要校验很是麻烦,想到通过annotation注解校验规则到field上会清晰方便不少,然后查到JSR303就是干这事的,有一个实现是hibernate搞的hibernate-validator。
不过既然想到了就顺手实现下试试,因为只是简单尝试,也不顾什么JSR303了,想到哪写到哪,在某需求讨论会上花了半个多小时搞出了下面这个非常简单的Vifix Validator。现在只实现了一个NotNull、一个Regex以及一个可指定自定义validator的annotation。
如果哪位有兴趣看看我的悲催代码的,下载点这里XD->VValidate。工程通过maven3构建,测试在src/test/java/TestDriver.java。
2010这一年
2010年要过去了,因为冷空气降临而罕见的在杭城出现零下五度的天气的情况下……我宅在家里开着空调决定尝试第一次总结下我一年所做的事。
工作上,首先是从去年就延续过来的加班,并且把女朋友加没了。然后是迫于加班的压力和对业务的毫无兴致,预谋转岗去UED,结果做起了基础产品。虽说和预期目标不符,但也算往自己期望的大方向迈出了一步,总之工作上较之前顺心一些。只不过中途转了部门或多或少对眼前利益有些影响,需要平衡下心态。在做的产品一年中发生了相当大的改变,虽然还谈不上多成熟,但也是被不少人期待着。最后就是打算抽空憋份简历出来,至于要不要派上用场,等年后再说。
生活上,首先要复述的是女朋友没了,因为加班,以及各种加班所带来的各种问题。然后是终于下定决心去把牙齿矫正了,起因是参加公司的一个K歌比赛,在事后的宣传视频中看到我那一颗凸出的门牙。花了1W1,让我很是肉疼,时至今日我居然已经想不起满嘴食物是什么感觉了,吃饭的时候总是在为饭后要刷牙而纠结。其次是老爸赞助买了辆车,相当意料之外的发展,虽说杭城坚定不移的在往堵城的方向前进,不过至少买车后的几个月给我带来了相当的方便。最后就是在这一年中我还是有相当大比重的时间处于蛋疼状态中,因此健身、看书、游戏等杂七杂八的事情做了一堆,却没有好好坚持下来的一件事,同样包括这个BLOG,这是我一如既往的毛病。
工作这近两年时间,只感觉以前的朋友变淡了,新的朋友却似乎没有出现,虽然要说的话还是有一位的。这也是我宁可蛋疼而懒得社交的结果。只觉得这一年做了不少事,但硬要说,却又说不上什么有价值的。公司同事有人戏称我为winner,他的意思大概是我年方二二,便房车在手、老婆我有的感觉吧。只不过虽然房车在手,老婆却还没谱呢。而且我这年龄,刚从象牙塔中走完预定的路程,正是最不愿安定的时候,父母给的房和车却是让我相当的束手束脚,仿佛把我绑在杭州,这也需要自己的决断。
总之2011的TODO LIST大纲如下
- 赚钱花
- 尝试理财
- 积极点,无论是工作、生活、学习。过的充实起来
无聊的话无聊的事
这确实是一些无聊的话,无聊的事,无聊的以至于笔者都不知道什么时候会随时写不下去。不过随便写写总还是有那么点意思的样子,就当是找不到倾诉,自己说给自己听。
其实,都是一些无聊的思想的自言片语,无聊的没人会去思考这到底有没有意义,也许自己也想不清。其实,这些东西偶尔各种推上面牢骚两句也就过去了,不过不想让太多身边的朋友知道,于是...
好吧,事情大约应该是在年初开始,不过鉴于今天才想到要写点什么,于是先把今天想记录的,给记录吧:
就在刚刚,想到了一些恐怖的事情,甚至,有点恐慌。
然后。
作为一个伪Geek-伪宅-真Coder,我承认我不了解,不熟悉,不在行的事情,确实是太多了。身边的各种人,各种事,看得到的,看不到的,都在用各种方式告诉我一些我懂或不懂的东西。说实话,我只想自己能像一个普通人一样,普普通通的人一样。不知道从什么时候开始,莫名奇妙的变得开始胡思乱想,醒着想,昏着想,做梦什么的也在想。恨不得把所有所知空间时间里面,所有各种事物,各种组合形式统统想完,当然是自己能认知的范围以内。
这,真的是一件挺无聊,又挺恐怖的事情。想到好的事,笑不出来,因为觉得不真实,虚无缥缈;想到坏的事,会不安,觉得怎么也会有可能发生。委婉的说,职业病;直接的说,神经病。
为什么总是要去想下一步会怎样,要去想别人会怎样,要去异想各种乱七八糟的上下文,以至于仍然不能确定方向,找不到办法解决各种问题。于是就被这些不知道从哪里飘来,飞来,滚来的似有非有的东西给困惑,然后仰头叹一声,我又迷茫了。摇摇头看看地,结果还是原地不动,毫无进步,任时间,人群,匆匆流过。
有一点还算明白的事情,就是自己真的不想在这样想下去了。我想过的简单一点,让脑子休息一点。说这么多,想这么多,做这么多,说白了都是在自己掩护罢了。唉...
寂寞,是种病。
成本一块钱修复电容屏抽风
前几天在等公交的时候突然我的Hero屏幕抽风了……具体表现就是有时候乱飘,单点变多点,然后手指离开几公分也有反映。总之是各种不能用了……本来打算去换个屏或者卖了换成MS的……
不过今天无意中看到可以用电击法治疗之……于是就试了下,所用工具就是一次性火机上的点火器。拆了一个火机后,对着屏幕电了十多二十下,亮屏的时候,不亮的时候,拿在手上放在地上各种电……总之电完之后直到现在都好好的,貌似确实有效果~所以说电电更健康啊~
想查查原理,查了半天还是不知道具体为什么,哪位路过的同学学电工啥的可以解答一下~
做了件有趣的事情
有个好友在国内某网站当编辑,他的悲催主管要求他们每一个人在站内要有3个拥有500好友的马甲用来干各种事情……好友便求助于我帮忙点掉一些加好友申请,但本着技术是第一生产力的原则,于是我尝试着分析了下某网站申请加好友的流程并调戏了一把。以前也没有尝试过做类似的事情,所以在这里随便记录一下,具体内容就不说了……不然应该会被看出来是哪个网站……
申请加好友的操作其实很简单,输入一段话和验证码按确定就好了。要模拟这个操作所需要解决的几个问题就是:
- 获取到请求地址和参数
- 附带用户登录信息发送请求
- 绕过验证码
第一点,通过chrome开发者工具或者firebug都可以,抓取浏览器和服务器之间的请求和响应就可以获取到请求地址和参数。稍微分析下参数之后就找出了需要的信息……
第二点,其实只需要在请求的时候把cookie信息一并丢过去就好了,sessionId也是放在cookie里的。通过在chrome的js console里输入document.cookie获取到cookie内容……
第三点,好吧这个其实应该是最麻烦的部分……我从来没关注过这方面的信息,验证码原理什么的OCR什么的完全不懂啊。但是在分析了某网站的验证码机制后发现相当悲催……它在请求验证码的时候把验证码图片以及一个和图片关联的惟一ID传送给浏览器form,然后通过用户输入的验证码和那个惟一ID是否匹配来验证(以上都是我猜的~)。杯具的地方在于这个验证码惟一ID在被验证一次后并没有即时失效,在相当相当相当长的一段时间内,通过那个惟一ID和验证码发起请求都有效(以上也是我猜的~都不知道是不是有失效策略……),于是于是于是~万事俱备,只欠编码~
首先我手动操作发了一个加好友申请,抓取到请求和响应后把请求地址,用户id,验证码以及验证码惟一ID分离出来,把好友给我的活跃用户表格正则表达式提取为一堆数字ID初始化为一个集合。接着要做的事就是拼请求,开连接,丢cookie信息,发起请求获取响应,然后要是乐意的话分析下response的信息,对成功失败以及重复发送申请进行统计……在简单实验了几次成功之后,我就很欢乐的给他的三个用户总过发了3000多个好友申请……就不知道通过率有多少了……
BTW: 程序是用Scala写的,其实也没用什么Scala的特性,主要是拼请求地址之类有一大堆乱七八糟符号的字符串的时候用原始字符串各种好用不用转义……