




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年08期程序员配套源码及相关链接为了方便大家查阅,现把2010年08期程序员杂志中相关链接及代码发布在此:微博 原文请见:/3783/程序天下事P16 微软技术专栏 推荐资源视频在Norwegian Developers Conference技术会议上,C#大师级人物Jon Skeet奉献了一个精彩的课程。视频地址:http:/streaming.ndc2010.no/tcs/?id=AFDB4098-C5C8-49DF-8C2A-7E317F63E72DP21 数据库技术专栏 新闻快讯Repscan 3.5扩充对MySQL和DB2的数据库漏洞评估支持/secworld.php?id=9492新品发布iPad周刊DB Viewer Plus Lite提供iPad与Oracle、SQLServer、DB2、MySQL、PostgreSQL、Access等数据库的浏览及同步功能http:/www.ipadweek.ly/apps/364584373/针对MapReduce封装的预制分析软件包/node/1438569IT Business Edge:基于亚马逊EC2的数据库集成方案/cm/blogs/lawson/new-open-source-cloud-data-integration-solution-runs-on-amazon-ec2/?cs=41731事件PostgreSQL停止对较早前版本的支持PostgreSQL宣称下个关于7.4和8.0版本的补丁将是针对这两个版本的最后一次补丁。/open/news/item/End-of-support-for-old-PostgreSQL-versions-1029897.htmlP23 游戏开发专栏 推荐资源李巍的博客:/noslopforever/P24 安全专栏 本月热点IT价值联盟网址:/P29 Web专栏 代码1:一起来了解这些领域的应用。http.createServer(function (req, res) res.writeHead(200, Content-Type: text/plain); res.end(Hello Worldn);).listen(8080, “”);代码2:处理并发请求效率更高等“id”: “036378”, “name”: “etai”, “job”: “F2E” 代码3:并且在海量存储、高并发读写方面有绝佳的表现。var t = db.things.findOne( name : “etai” );P55 编程语言的发展趋势及未来方向代码段代码1:如果是用命令式的编程方式,可能是这样的:var groups = new Dictionary();foreach (Product p in products) if (p.UnitPrice = 20) if (!groups.ContainsKey(p.CategoryName) Grouping g = new Grouping(); g.Name = p.CategoryName; g.Count = 0; groupsp.CategoryName = g; groupsp.CategoryName.ProductCount+; var result = new List(groups.Values);result.Sort(delegate(Grouping x, Grouping y) return x.Count y.Count ? -1 : x.Count p.UnitPrice = 20) .GroupBy(p = p.CategoryName) .OrderByDescending(g = g.Count().Select(g = new Name = g.Key, Count = g.Count() );代码3:这段代码还可以利用C# 3.0中内置的DSL,即LINQ查询语句来改写:var result = from p in products where p.UnitPrice = 20 group p by p.CategoryName into g orderby g.Count() descendingselect new Name = g.Key, Count = g.Count() ;代码4:在F#中如果要计算一个列表所有元素之和,也可以使用命令式的风格来编写代码:let sumSquaresI l = let mutable acc = 0 for x in l do acc 0| head : tail - sqr head + sumSquaresF tail代码6:例如有这样一段代码:var a = 0, n = 10;for (var i = 0; i n; i+) a += i;P62 ECMAScript 5th中的语言特色代码段代码1:我们可以这样来声明一个对象的属性: aName : aValue代码2:我们可以很方便地来实现只读(Writable = false)属性定义,例如: get aName() return aValue代码3:当然,我们也可以通过这种方法来声明属性读写器(getter/setter): get aName() , set aName(newValue) 代码4:那么实例就存在与构造器不一致的情况。例如:MyObject = function() MyOtotype = a: 100, b: 1000;obj1 = new MyObject()MyOtotype = x: 100, y: 1000;obj2 = new MyObject()/ 显示true, 表明构造器相同(当然也可以访问到/ 相同的prototype)alert(obj1.constructor = obj2.constructor);/ 显示true, 表明obj1仍然识别为MyObject()的实例alert(obj1 instanceof MyObject)/显示false,表明obj1使用着不同的原型(真实的原型彻底丢失了)alert(obj1.isPrototypeOf(totype);代码5:这样就可以随时找到obj1所用的原型了:/ (续上例,用于ES5)/ 显示true,能访问到obj1的真实原型alert(obj1.isPrototypeOf(Object.getPrototypeOf(obj1);代码6:使用户可以显式地指定一个函数用作方法时所属的对象实例:func = (function() ).bind(myObj);func();代码7:而无论是否重新将它指定为其他对象的方法。例如:myObj = x: 1000 ;foo = function() alert(this.x) ;func = foo.bind(myObj);otherObj = x: other, f: func, f2: foo ;func();/ 显示1000otherObj.f();/ 显示1000otherObj.f2();/ 显示“other”代码8:可以声明一个适用于对象系统的枚举类型来:Week = Object.freeze( Monday: , Tuesday: , / 其它枚举值 get Mon() return this.Monday , get Tues() return this.Tuesday , / 其它简写);alert(Week.Monday = Week.Mon); / 显示true代码9:构造器函数对实例的如下修饰作用是可有可无的:/ 在构造器中修饰对象实例function MyObject() this.yyy = ;代码10:而不再有“构造器”这样一层语义。例如:/ 在构造器中修饰对象实例newObj = Object.create(prototypeObj, PropertyDescriptors);代码11:它用一个简单的对象来表示,例如: propName1: value: , writable: , , propName2: , / propDesc 代码12:它相当于给通过为每一个属性调用:Object.defineProperty(newObj, propName, propDesc);代码13:从而来指定该上下文环境使用严格模式,例如:use strict代码14:那么我们通常会用下面的方式来使它生效:srcCode = ; / get from remote web site.eval(srcCode);/ 考虑到JSON的兼容问题,可以加一对括号eval( + srcCode + );/ 考虑到对全局或当前执行上下文的影响,可以创建一个函数来(在/ 全局环境)执行它(new Function(srcCode)();/ 考虑到上述代码可能需要一个指定的this对象引用,可以使用/ with闭包来执行它with (thisObj) eval(srcCode);在ES5中的严格模式就提供了一种避免这些Ajax、remote JSON object等技术中的常见危险的简单方案。例如:eval(use strict; + srcCode);代码15:因此你可以选择将代码执行在一个“完全独立的函数闭包中”,例如:(new Function(use strict; + srcCode)();代码16:也可以将它执行在当前的函数上下文环境内(可以使用当前函数以及外层函数中的变量名等): eval(use strict; + srcCode);代码17:或者为它单独地指定一个对象,作为执行的上下文环境:/测试数据var myObj = x: 100;/创建一个函数并绑定给myObj func = (new Function(srcCode, with (this) eval(use strict; + srcCode);).bind(myObj);/执行该函数, 执行时上述myObj将成为with()中的this对象,/并使srcCode运行在的对象闭包中。func(alert(this.x);); / 输出100func(alert(x);); / 输出100方便开发人员测试。其获取地址为:。P66 拓展动态编程的新领域代码段代码1:以下代码创建了一个ExpandoObject对象:dynamic dynamicObj = new ExpandoObject();我们可以随时给这个对象增加新成员:dynamicObj.Value = 100; /添加字段dynamicObj.Increment = new Action() = dynamicObj.Value+); /添加方法动态添加的成员与普通的类成员用法一样:for (int i = 0; i 10; i+) dynamicObj.Increment();/调用方法Console.WriteLine(dynamicObj.Value=0, dynamicObj.Value);/访问字段代码2:还可以随时移除不再需要的成员:/移除Increment方法(dynamicObj as IDictionary). Remove(Increment);代码3:以调用Word为例,在C# 4之前可能需要这样写代码:Object wordapp = new Word.Application();/创建Word对象Object fileName = MyDoc.docx;/指定Word文档Object argu = System.Reflection.Missing.Value;Word.Document doc = wordapp.Documents.Open(ref fileName, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu, ref argu);代码4:可以写出更简洁的代码:dynamic wordapp = new Word.Application();dynamic doc = wordapp.Documents.Open(FileName: “MyDoc.docx”);代码5:dynamic的功能是由DLR所支撑的,是C#编译器与DLR分工合作的成果。请看以下示例代码:dynamic d = 100;d+;C#编译器在处理上述代码时,并不检查变量d是否支持自增操作,而是为其创建一个CallSite对象(p_Site1):private static class o_SiteContainer0 public static CallSiteFunc p_Site1;代码6:简化的代码示意如下(通过Reflector得到,为便于阅读,修改了变量名): object d = 100; object CS$0$0000 = d; if (p_Site1 = null) p_Site1 = CallSiteFunc.Create(); d = p_Site1.Target(p_Site1, CS$0$0000);代码7:以“d1+d2”这个动态表达式为例,如果在程序运行时d1和d2都是int类型的整数,则DLR生成的规则为:if( d1 is int & d2 is int) /测试条件 return (int)d1+(int)d2; /语法树规则是DLR缓存的主要对象。前面介绍的动态站点对象Target属性所引用的委托是第1级缓存,它实现的处理逻辑是:/当前处理规则,属于第1级缓存if( d1 is int & d2 is int) /测试条件 return (int)d1+(int)d2; /满足测试条件,直接返回一个表达式树/未命中,则在第2级、第3级缓存中查找,如果找到了,用找到的结果更新第1级缓存return site.Update(site,d1,d2); 代码8:向外界返回一个动态元数据(DynamicMetaObject)对象:DynamicMetaObject GetMetaObject(Expression parameter);代码9:首先创建一个ScriptRuntime对象,用于在一个.NET应用程序域中嵌入一个特定动态语言的运行环境:ScriptRuntime pythonRuntime = Python.CreateRuntime();接着需要创建一个ScriptEngine对象,它是动态语言代码的执行引擎:ScriptEngine engine = pythonRuntime.GetEngine(py);ScriptScope对象类似于C#中的命名空间,其中可以通过定义一些变量向动态代码传入数据,比如下述代码将一个C# 创建的ExpandoObject对象传给Python代码:ScriptScope scope = pythonRuntime.CreateScope();/C#创建动态对象dynamic expando = new ExpandoObject();expando.Name = JinXuLiang; /动态添加一个字段/让IronPython接收C#创建的Expando对象scope.SetVariable(ExpandoObject, expando);string pythonCode = print ExpandoObject.Name; /IronPython引擎执行Python语句engine.CreateScriptSourceFromString(pythonCode).Execute(scope); 上述示例代码是直接执行Python代码。在实际开发中,更常见的是直接执行Python文件中的代码。假设有一个Calculator.py文件,其中定义了一个Add函数:def Add(a,b): return a+b则以下C#代码可以直接执行之:ScriptRuntime pythonRuntime = Python.CreateRuntime();dynamic pythonFile = pythonRuntime.UseFile(Calculator.py);Console.WriteLine(pythonFile.Add(100, 200);P69 从Sun JDK 5、6、7看Java的提升代码段代码1:Java程序中通常充斥着这类强制转换类型的代码:List names=new ArrayList();names.add(“bluedavy”);String name=(String)objects.get(0);代码2:来避免这种类型的错误。例如上面的代码演变为:List names=new ArrayList();names.add(“bluedavy”);String name=names.get(0);代码3:就很少再见到:List names=new ArrayList();for (Iterator iterator = names.iterator(); iterator.hasNext();) String name = (String) iterator.next();.代码4:取而代之的,更多的都是如下写法:List names=new ArrayList();for(String name:names).代码5:在JDK 5以前经常有如下代码:public class Switch public static final int ON=0; public static final int OFF=1; private static int status=ON; public static void setStatus(int newstatus) status=newstatus; 在采用枚举后,可将上面代码修改为:public enum Status ON,OFFpublic class Switch private static Status status=Status.ON; public static void setStatus(Status newstatus) status=newstatus; P77 超凡脱俗的极限Common Lisp资料CL语言标准的一个HTML版本目前由LispWorks公司负责维护,其地址是 /documentation/common-lisp.htmlP80 R不仅仅是一门语言代码段及资料代码1:以下是以一元线性回归的例子:x - 1:10y - x+rnorm(10, 0, 1)fit - lm(y x)summary(fit)代码2:代码来自boxplot函数的manual(更详细的关于R的作图功能可以参看http:/www.stat.auckland.ac.nz/paul/RGraphics/rgraphics.html)boxplot(mpgcyl,data=mtcars, main=Car Milage Data, xlab=Number of Cylinders, ylab=Miles Per Gallon)代码3:以下例子需要你已经安装了arules包。library(arules)data - paste(item1,item2,item1,item2,item3, sep=n)write(data, file = demo_basket) tr - read.transactions(demo_basket, format = basket, sep=,)data(Adult)rules - apriori(Adult, parameter = list(supp = 0.5, conf = 0.9, target = rules)代码4:以下是一个来自KMeans说明文档的例子:x - rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)cl - kmeans(x, 2)plot(x, col = cl$cluster)points(cl$centers, col = 1:2, pch = 8, cex=2)代码5:运行该例子需要你已经安装了e1071这个包。library(e1071)data(iris)x - subset(iris, select = -Species)y - iris$Speciesmodel - svm(x, y) summary(model)pred - predict(model, x)table(pred, y)CRAN包括了各种你能想象得到的工具包,当然也有不少并行计算的包,这些包被归纳在R高性能计算相关的包列表中(参见/web/views/HighPerformanceComputing.html)其中统计之都()是国内R用户的聚焦地。第三届R语言会议参会者来源可以从会议纪要中看到(/2010/06/3rd-china-r-beijing-summary)代码6:一个R写的协同过滤推荐的例子data - read.table(data.dat, sep=, header=TRUE)user - unique(data$user_id)subject - unique(data$subject)uidx - match(data$user, user)iidx - match(data$subject, subject)M - matrix(0, length(user), length(subject)i - cbind(uidx, iidx)Mi - 1mod - colSums(M2)0.5MM - M %*% diag(1/mod)S - crossprod(MM)R - M %*% SR - apply(R, 1, FUN=sort, decreasing=TRUE, index. return=TRUE)k - 5res Intfact 0 = 1fact n = n * fact(n - 1)main : IO ()main = print (fact 5)代码2:它里面调用的 print 函数,类型为:print : (Show a) = a - IO ()代码3:我们可以写出下面这样的代码:numbers = 1.代码4:因为需要多少,才生成多少: take 10 numbers1,2,3,4,5,6,7,8,9,10代码5:两个列表,一个列表中的元素是字符串,一个列表中的元素是数字,lst1 = hello, world, functional, programminglst2 = 4, 3, 3, 7把lst1列表中的字符串用lst2列表中的数字来截取,获得新的列表为:“hell”, “wor”, “fun”, “program”我们先用过程式的思路来解决它,很简单,就是一个for 循环嘛。用Python来实现:lst3 = for i in range(4): s = lst1i length = lst2ilst3.append(s:length)代码6:zip 的函数类型为:zip : a - b - (a, b)非常直观,不过这里的a、b是类型变量,不要搞混。Haskell 代码:lst1 = hello, world, functional, programminglst2 = 4, 3, 3, 7lst_z = zip lst1 lst2lst_z 的值为:(hello,4), (world,3), (functional, 3), (programming, 7)。新的列表中每个元素为 (String, Int) 类型,我们定义一个处理它的函数,函数类型为: (String, Int) - String 。fun:(String, Int) - Stringfun (s, l) = take l s执行结果为: map fun lst_zhell,wor,fun,program我们把程序串起来:lst_z = map fun (zip lst1 lst 2)把两个列表先zip合并,然后再对每一个元素执行一个操作,这又是一个很常见的操作模式,能不能再提取出一个语言的固定构件呢?我们可以把函数当作一个参数,定义这样一个函数:zipAndMap : (a, b) - c) - a - b - czipAndMap f l1 l2 = map f (zip l1 l2)解释下这个函数的类型定义,其中的 (a,b) - c) 正好与前面 fun 函数的类型相匹配,这里的 a,b,c是类型变量,用来实现范型函数的声明。执行它: zipAndMap fun lst1 lst2hell,wor,fun,program其实Haskell中内置了 zipWith 函数,其类型为:zipWith : (a - b - c) - a - b - c要使用它我们需要把fun函数的定义稍微修改为:fun2 : String - Int - Stringfun2 s l = take l s执行: zipWith fun2 lst1 lst2hell,wor,fun,program我们还可以把 fun2 的定义也去掉,直接使用lambda匿名函数: zipWith (s l - take l s) lst1 lst2hell,wor,fun,program代码7:安装好GHC后,我们就可以尝试运行下ghci:hanzhupenglocalhost $ ghciGHCi, version 6.10.4: /ghc/ :? for helpLoading package ghc-prim . linking . done.Loading package integer . linking . done.Loading package base . linking . done.Prelude在Prelude 提示符后,我们可以直接输入命令执行:Prelude print Hello worldHello world我们可以把刚才编写的程序调入环境,使用 :l 命令载入程序:Prelude :l csdn_sample.hs1 of 1 Compiling Main ( csdn_sample.hs, interpreted )Ok, modules loaded: Main.*Main现在提示符变成了 *Main ,这表示我们现在在 Main 模块下。我们可以直接使用这个模块下的值和函数:*Main lst1hello,world,functional,programming使用一些列表操作函数的例子:*Main length lst14*Main map length lst15,5,10,11*Main take 2 lst1hello,world调用程序中的main函数:*Main mainhell,wor,fun,programhell,wor,fun,programhell,wor,fun,program下面我们将程序编译成可执行文件,使用ghc,在命令行下执行:$ ghc csdn_sample.hs -o csdn_sample$ ./csdn_sample hell,wor,fun,programhell,wor,fun,programhell,wor,fun,programP86 镰刀、锄头和剪子一组简单实用的工具代码段代码1:例如我们想要将Apache access log 中来源地址是0的请求过滤出来:grep 0 access.log-v不容易理解,举例而言,比如我们要找不是0的访问,就可以使用:grep -v 0 access.log代码2:例如将一个压缩的access log过滤出0的请求:bzcat access.log.bz2 | grep 0代码3:那么我们就可以将最先和最后访问的0来源记录分别显示出来:bzcat access.log.bz2 | grep 0 | headbzcat access.log.bz2 | grep 0 | tail代码4:那么就是一个简单的操作了:bzcat access.log.bz2 | grep 0 | wc -l代码5:这是我的Mac上Apache2的日志:0 - - 02/Jun/2010:13:24:47 +0800 GET /hd/ HTTP/1.1 200 26940 - - 02/Jun/2010:13:24:48 +0800 GET /hd/images/gradient.jpg HTTP/1.1 200 166240 - - 02/Jun/2010:13:24:50 +0800 GET /favicon.ico HTTP/1.1 404 2090 - - 02/Jun/2010:13:25:01 +0800 GET /hd/epub HTTP/1.1 301 2400 - - 02/Jun/2010:13:25:02 +0800 GET /hd/epub/ HTTP/1.1 200 6510 - - 02/Jun/2010:13:25:02 +0800 GET /icons/blank.gif HTTP/1.1 200 1480 - - 02/Jun/2010:13:25:03 +0800 GET /icons/back.gif HTTP/1.1 200 2160 - - 02/Jun/2010:13:25:04 +0800 GET /favicon.ico HTTP/1.1 404 209我想输出0来源的第一列为序列次数,第二列为来源IP,第三列为访问对象的新文本:awk if($1=0) d=d+1; print d,$1,$6,$7,$8 access_log | head代码6:通常可以这样来做:awk print $1 access_log | sort | uniq -c | sort -r | head代码7:最终显示出排名前10的IP。结果如下: 101 0 8 3 46代码8:我想知道现在连接到服务器上的IP地址、端口、数量好用于在被攻击时及时地对恶意来源IP进行处理:netstat -an | grep ESTABLISHED | awk print $5 | awk -F: print $1 | sort | uniq -c | sort -rn | head代码9:以下即是在我的Mac上的输出样例: 16 1.80 2 25.5222 1 9.443 1 02.80 1 3.1863 1 3.443 1 9.443 1 7.443 1 55.80 1 4.80代码10:如果只是一个文件,那么很简单:ffmpeg -i video.avi -f mp3 audio.mp3但是如果我想将所有当前目录下的所有avi文件抽出mp3放到/home/hd中去,那么将会是一个很有趣的拼字游戏:find . |grep .avi | awk -F/ print ffmpeg -i,$0,-f mp3 /home/hd/$NF.mp3 | sh首先找出当前目录下的所有文件,然后过滤出.avi来,再生成要执行的命令,最后,把这一批命令塞给sh让它去执行,多爽的事情。如果只是find . |grep .avi | awk -F/ print ffmpeg -i,$0,-f mp3 /home /hd/$NF.mp3那么它的输出结果可能是这个样子的:ffmpeg -i ./tabview. avi -f mp3 /home /hd/tabview.avi.mp3ffmpeg -i ./threads. avi -f mp3 /home /hd/threads. avi.mp3ffmpeg -i ./treeview. avi -f mp3 /home/hd/treeview. avi.mp3代码11:先使用一个大家最容易看懂的方法:sort a b | uniq -c | awk if ($1=2) print $2 代码12:当然我们还可以使用一个更为豪放的方式进行这个工作:sort a b | uniq -c | grep 2 | awk print $2代码13:这样就会有一个更为简单的方式:sort a b | uniq -d代码14:我列出一个最为复杂的全awk解决方案:awk if (FILENAME=a) d$0=1;else if ($0 in d) print $0 a bP95 UML真体验资料 使用graphviz产生UML类图http:/www.ffnn.nl/pages/articles/media/UML-diagrams-using-graphviz-dot.php 另一个用文本生成UML图的工具http:/www.UML/P98 竞争优势和建模资料以UML为基础的建模工具目前已经有100多种(/Tools/Newindex1.htm)。P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制水岗位培训题目及答案
- 指数函数高三题目及答案
- 虚拟现实行业市场趋势分析
- 2025年电工题库考试技巧及答案
- 2025年项目考试试题简答题及答案
- 2025年山西省阳泉市事业单位工勤技能考试题库及答案
- 2025年河津数学考试题及答案
- CN120091639B 接触孔形成方法及图像传感器 (合肥晶合集成电路股份有限公司)
- 2025年少先队小达人题库及答案
- 《夏天里的成长》课件 统编版语文六年级上册
- 2025年云南省中考英语试卷真题(含标准答案及解析)
- 开学第一课(教学课件)-八年级语文上册同步备课系列(部编版)
- 【公开课】第一节+内能及其改变(教学课件)物理沪科版2024九年级全一册
- 海事英语阅读 课件Unit 9 Text A Types of Maritime Vessels
- 发型师的职业素养
- 2025科技公司研发部门劳动合同范本
- 少儿沪语趣味启蒙课件
- 机电安装工程验收用表
- 小红书运营合同协议
- 家事财产申请表
- 安徽离婚协议书范本
评论
0/150
提交评论