变动如下:
- 新增了内置的Python语法支持
- Fix了样式模板的一些跨浏览器兼容问题
- 补充了一些C#特殊操作符的支持
Enjoy! :)
用代码创建一个属于我的世界……
变动如下:
Enjoy! :)
首先,在这2009年的第一个日子里,祝大家元旦快乐,在新的一年中心想事成。在这个特殊的日子里作为程序员的我也要特殊地庆祝一番。今天这个时刻我向全世界发布CodeStyler,我做的一个给代码上色的小工具,献给每一位程序员博客。:)
项目首页 http://code.google.com/p/code-styler/
下载 http://code.google.com/p/code-styler/downloads/list
首先来说说为什么我要"Reinvent the wheel",也就是说说CodeStyler与众不同之处。其实与众不同之处也没那么多,我个人认为就一个“方便”,主要体现在两点:不依赖于任何博客,随时随地可以格式化代码;不需要修改代码就可以增加对新语言的支持。其中我对第二点的需求是很重视的,因为这意味着高可扩展性,尤其是当我增加了对Dcg模板语法的支持后更加欣赏这个功能了。:)
想新增一个语法的支持很容易,不需要改代码,只要提供两个文件就可以了:一个语法的规则文件,一个样式模板文件。语法规则文件是由一系列正则表达式组成的,描述了语法的各个组成部分(想上色的部分)正则表达式之间有顺序关系,先匹配第一行,替换,再匹配下一行,以此类推。样式模板文件就是一个Dcg语法的模板,它接受一个IEnumerable<Token>参数,这个参数在遍历时会返回一个一个的token(识别出的语法组成部分和普通的文本),接下来想怎么格式化便随意了。在下载的zip包中有源代码,LGPL License,里面有一些自带的语法支持,如C#、HTML、Dcg等可以拿来做参考。:)
此次代码编写的感受就是正则表达式真XX难调,费了九牛二虎之力终于可以面向大家公开了。我个人将自己的一些代码都试了一遍,保证没有问题,不过由于是第一版,加上正则表达式实在容易出错,所以各位实际用下来如果碰到什么问题还请在项目网站上反馈一下,我会尽快fix。下面是一张CodeStyler的窗口截图和一段用CodeStyler格式出来的代码,演示用。
1: <html> 2: <head> 3: <title>Welcome</title> 4: <style type="text/css"> 5: body p { color: black } 6: #myid { 7: margin: 10px; 8: } 9: </style> 10: <script type="text/javascript"> 11: function foo(a, b) { 12: var c = 1; 13: return a + b + c; 14: } 15: </script> 16: </head> 17: <body> 18: <p>Hello World</p> 19: </body> 20: </html>
v3.3.100是一个bug fix release,即,没有功能的添加而是修复了一些bug。修复的bug如下:
建议所有使用v3.3.90的人都更新到v3.3.100。
在计划了三个月后,DCG v3.3.90终于被我完成并发布了,今天正好是12月25号,作为圣诞礼物送给大家吧。
改动如下:
秀一个Recursive Private Section调用的代码片段:
介于DCG的用户也有一定规模了(两个团队,Orz),我争取在接下来的一段日子里从头到尾在Blog中仔细描述DCG的各种使用方法、它的语法等,并同时会给出相关内容的示例模板,敬请期待。:)
这里有两个关于DCG的连接:
Dcg项目首页及下载:http://code.google.com/p/dcg/
Dcg讨论组,可用来沟通:http://groups.google.com/group/dynamic-code-generator,这个在项目首页也有链接。
近日发现自己用的Google服务是越来越多了。有些服务例如Google SearchWiki需要先登录才能够使用,日常使用又嫌登录比较麻烦,所以听从了同事的意见做了一个GreaseMonkey脚本,可以在访问任一Google页面时登录,如果还没有登录过的话。
我写了两个脚本来满足这个需求,两个脚本要合起来用。一个是负责将页面转到登录页面的,另一个是负责自动填充表单并提交的。脚本已上传到了userscripts.org上了,链接如下:
安装好后需要改一下帐号信息,将YOUR_ACCOUNT_NAME改为你自己的Google帐号名,将YOUR_PASSWORD改为你自己的Google帐号密码。
这套脚本的优势就在于无论你有没有保存Cookie或者登录过Google没有都可以保证你在访问任一Google页面时是登录的。而缺点就是一旦启用了脚本后就无法登出了,因为登出后会再次登录。如果你实在想登出的话,那么你只需要点一下Firefox中的小猴子暂时禁止GreaseMonkey,然后再登出就可以了。
最近在研究jQuery的时候突发奇想,想起了前段时间看过的GreaseMonkey。突然想用jQuery写一个GreaseMonkey脚本试试看,看看到底jQuery能有多强大。
随意浏览了一下各个网站,发现Newegg.com有个我可以做做文章的内容。Newegg.com上有一些产品的价格信息是隐藏起来的,只有当你点击相应的链接后才会在弹出窗口中显示出真实的价格来。那么我想了一下,是否可以做这样一个GreaseMonkey脚本,使我不用点击链接就直接可以在当前页面上看到真实价格呢?
说干就干,随即在Firebug的帮助下完成了这样一个显示隐藏价格脚本的编写。目前这个脚本我已上传到了userscripts.org上,有需要的朋友可在下面链接得到:
Screenshots:
下面描述一下这个脚本的实现过程,以供读者和我本人日后参考。:)
整个脚本由于有jQuery的帮忙所以所需的代码量很小。结论是jQuery真的很强大,真的符合它的设计理念:“Write less, do more.”
注意事项:这里需要注意如果原本页面中就有引用jQuery类库的话那么我们在GreaseMonkey中就不要再引用了,会出现问题。所以在脚本中需首先判断jQuery对象是否已经存在。
TechED北京的最后一日会给我们带来什么样的惊喜呢?让我们来看看我接触的一些主题:
BI的未来之路
标题有些唬人了,其实这里所讲的只是面对非专业BI人员在需要一些BI功能时可以有的选择,当然讲师讲的是微软产品。也就是,像我们这些不懂BI的人想要自己做一些数据挖掘的话那么就可以用这里提到的产品来试试看了。简单地说微软就是想把Excel当作这个简单的BI工具,在Excel的基础之上提供一套简化的BI工具。它的名字是Gemini。
微软的逻辑是这样的,不会有很多人懂得BI,但却有许多人需要BI,每当我们需要一些BI功能的时候我们总是要去找专业人员帮忙解决,哪怕只是很简单的一些功能。那么我们是否可以自己动手满足自己的这些小需求呢?这就需要一个比较简单的,大家都熟悉的软件了。基于这套推理,Excel自然成为了最佳选择,不过它本身还不够满足BI需求,所以微软在Excel之上提供了Project Gemini,一个比较强大的Analysis套件。BTW,微软还会在2010年上半年推出SQL Server Kilimanjaro,一个面向BI功能的SQL Server特殊版本,注意它不是SQL Server的下一个版本,而是一个特殊版本。这个特殊版本可以处理微软定义的三个级别的BI需求并集成管理它们,这三个级别分别是:Personal, Team, Corporate。这三个级别来自于三种不同的需求场景,一个是作为个人我需要一些BI,一个是作为Team我们有我们自己的BI需求,而另一个则是整个企业的BI需求。当然后期还可以promote到更高的级别,比如个人的BI需求如果Team觉得好就可以集成到Team的BI处理中。
关于Excel作为BI工具,讲师一再强调这是一个给ocassional user使用的工具,不是给专业BI人员使用的工具。同时还提到了几个Gemini的特色,如下:
其它的特性还有基于组件的self-service reports,组件是可复用的单元等等。总的来说看起来还可以试一试,虽然Gemini目前并不是一个被微软支持的软件,甚至还没有发布。微软目前的打算就是让大家到时候试试看,好了您就买,他们就发展。
社区活动,听王老师讲课
王老师大家都知道是谁吧?VSTS的主题我们都听王老师讲过N遍了,其他的我就不多说了,单说这人气真可谓是旺。虽然可能我们大家都听过不少VSTS的讲座了,但是对于其他人来说却是一个很好的机会了解VSTS能做啥。
提一个无关紧要的趣事,本次TechED搞了一个小活动,叫“寻找你身边的MVP”。就是给你发一个单子,上面有不少知名MVP,你找到他们让他们给你印个章,凑够六个可兑换精美礼品一份。话说王老师就在此名单上,所以我们一路行走遇到无数“包围圈”,硬生生把我逼出了“圈”外不知道多少回。欲知详情,请直接咨询王老师。
使用OBA整合LOB应用
这基本上是一个讲Office应用的session。在每个公司内部都有很多流程与应用,我们称之为OA,用软件的方式自动化它们。那么微软推崇的一种做法是利用Office程序作为应用程序界面,以BizTalk、Workflow和WCF Service为后台流程扭转机制来实现业务流程自动化。选择Office是因为它易用、它知名,很多人用Office比我们开发人员用的熟练,Office对于他们来说是家常便饭,很熟悉的一个软件,就像Visual Studio对于开发人员一样。这有几个好处,那就是培训成本低了,因为用户都已经会用了,而且很熟悉;支持成本低了,这也是基于上述的道理;用户体验变好了,因为对于最终用户来说,有一个Office界面他们已经很满足了,Office的操作方式对于他们来说体验是最好的了。
如果是人机交互的流程应用,那么微软建议我们使用WF+MOSS来实现,这样也可以和其他的Office程序进行集成。要说用Office做程序的第二大优势就是它的高集成性(第一大是它的知名度,还记得吗)。另外讲师除了讲这些概念外还演示了一个Office应用,从后台拿数据到前台展示都涵盖的一个应用,不过并没有演示源代码。
Do these ten things or else get 0wn3d
我保留了这个原版的英文标题是因为这个session太帅了,个人觉得这是今年TechED最好的讲座。讲师是Steve Riley, Microsoft Senior Security Strategist。此人平时看起来就是一个穿着随意的老外,但一旦开始演讲后就变了,非常有人格魅力,特别诚恳,可以看出完全是对听众负责、准备的特别周全的一个人,特别风趣并且不站在讲台上讲,而是走到下面站在第一排听众座位前走来走去地讲,非常有激情而且PPT非常酷,很多的动画效果,非常的通俗易懂。哦,还有,非常可惜的是你我都已经再也看不到原版PPT了,TechED和网上能下载到的PPT都是For Publish版的,删掉了若干页面,精华啊!不用猜也知道被删减的原因是由于里面有一些“有趣”的图片和文字内容,幸好我有幸看到了他本人的原版PPT,可惜我不是一个画家,否则一定帮大家画出来。Steve这次的行程也是非常的匆忙,前几天在欧洲几个国家巡回演讲,今天(TechED第三日)又飞到北京进行下午的两场演讲,而晚上就要离开飞到另一个国家继续演讲,真是比谁都忙啊。
好了,言归正传,Steve也说过本次的讲座并不是一个告诉你该怎么做才会安全的一个check list,他本人也并不喜欢check list式的安全做法,他认为你应该懂security才能做好security,光靠一个check list是远远不够的,原因很简单,因为没有一个零安全问题的软件、网站存在,只是被发现的时间早晚而已。假设如果有人或企业能够做出零安全问题的软件的话,那么它将永远都不会被投入使用,因为它将需要无限的资源、时间去测试。这一点和bug是一样的,没有一个软件、网站是零bug的,只是被发现的时间早晚而已。所以你需要懂它才能正确的处理各种情况。
首先Steve介绍了“我们”和“他们”的区别,当然“我们”是指Good Guys,“他们”是指Bad Guys。结论很明显,做good guy要比做bad guy难很多,各方面都是bad guys胜出,听到这里也许你会想,“嗯,我应该马上去hack我的邻居了”。好吧,Steve会告诉你,“我做security是因为我觉得更有挑战”。
接下来Steve和我们分享说做security首先用对词汇,用正确的词汇才能表达正确用意,否则会产生理解上的偏差,当然,这对我们做开发的人来说也是一样。这里给大家分享一个Steve给出的公式,你在TechED的PPT上是找不到这个公式的,由于某些我不清楚的原因,TechED的PPT有很多删减。这个公式是Steve很推荐的一个公式,因为它很简单但却很实用。R = T * V * E,R代表Risk,T代表Threat,V代表Vulnerability,E代表Exposure。Threat要么是0要么是1,代表是否有bad guys想要侵犯你的系统;Vulnerability是一个从0到1的小数,代表你给出的一个衡量自己系统脆弱性的一个数值,你需要用你自己的标准来测量出这个数值;Exposure是一个数量单位,你的系统有多少个暴露处这个数值就是多少。由此可以计算出你系统的Risk,将risk与一个cost指数相乘你就可以得出说我现在的系统如果出现安全问题的话我大概会需要多少成本能够解决掉它,那么你就可以优先注重解决那些高成本的安全问题了。很酷!
Steve给good guys的一些建议。从心理上,你需要接受没人喜欢你这个事实,因为别人会把你想成那种整天都是天要塌下来的感觉。其次,你需要注意不要经常给人这种“什么都不能干”的感觉,别人会排斥你的,你需要随时注意“Protection, not restriction”原则。例如Steve本身就非常不喜欢别人限制他,尤其是在公共场所因为一些无聊的规则被限制(也可以说他是一个很有个性的人)。另外,Steve建议省省你的骄傲,多订阅一些安全网站和文章,你会发现比你更牛的人有的是,向人学习总比向人显摆自己很牛要实际得多。这对于开发人员来说也适用,技术是学不完的,不要太要面子,总摆出一副很牛的样子让人敬畏,多向人请教请教你会发现别人比你强得多。
将你自己想象成一个bad guy会有助于预防安全隐患,这很容易想象。同样对于开发人员来说也适用,在写代码的时候多想想用户会怎么用,怎样的边界会被输入等,这有助于测试和安全防患。
不要太过相信各种厂商给你做的产品演示,说什么用了他们的产品就可以再不用担心这方面的安全问题之类的话,没有人敢说100% secure,他们只是在推销而已。没有任何产品、书籍、解决方案或讲座可以解决你所有的安全问题,每种情况都是不一样的,Again,你需要相信的是一群懂security的人而不是一堆的工具。这点同样适用于软件开发,工具再好也没有人实用,真正的expert比任何工具都更可靠。
Steve还和我们分享了其他的一些精彩内容,大家可以去翻翻PPT,真的很可惜最全的原版再也看不到了,早知道当初应该向他要一份copy的。里面还有一些关于思考的内容,例如其中一张是酒店里通用的做法:将手纸的起始处折成三角形。Steve问为什么所有的酒店都是这样做?有什么意义?还是我们只是一味的抄袭?你是不是觉得check list就有点这种不知道为什么要做只是别人都做我也做的感觉呢?
虚拟化的安全性
很高兴这一session还是由Steve主持的,关于Steve大家通过我的文字可能对他都有了一定的了解,我就不再描述了。这里所指的安全性主要还是围绕着Windows Hyper-V展开的。他很生动的描述了Hyper-V的体系结构以方便我们了解它的一些安全特性与做法。由于这些内容有很多,如果大家对此感兴趣可详细看下PPT中的内容。Steve从在普通系统中我们如何做安全讲到VM有哪些不同,最后得出一个结论:VM的安全性与普通系统无区别,你平时怎么做安全VM后还是怎么做。-_-! 不过要注意Hyper-V中的Root有最高权限和影响Hypervisor的能力,所以不要用Root来运行任何程序以防止它被控制从而导致Hypervisor被控制。Hypervisor被控制意味着所有跑在Hypervisor上的VM都被控制。
Steve还share了一些有趣的数据,如下:
好了,这基本上就是全部TechED三天来的收获,如果大家想知道更详细点的话可以线下再与我交流或者仔细阅读PPT。另外在美国举行的PDC2008也有非常多的很棒的内容,大家可以在网上找录像来看。TechED北京的录像不知道会有多少,等出来了大家可以去挑自己感兴趣的去看看。