看好国内应用基础软件,惠普前副总裁加盟普元 简洁就是力量
02

2010年03期《程序员》配套源码及相关链接

作者: chenqiuge 分类:坊间人语   阅读:3,361 次 添加评论

为了方便大家查阅,现把2010年03期《程序员》杂志中相关链接及代码发布在此:


程序天下事


P16页,推荐资源


1.文章:《关于战略问题的通信之六》,摘自《软件随想录》:

http://www.ruanyifeng.com/blog/2009/03/strategy_letter_vi.html

2.ASP.NET Ajax Library工具http://ajax.codeplex.com/

3.Script#工具http://projects.nikhilk.net/ScriptSharp

4.Doloto工具http://research.microsoft.com/en-us/projects/doloto/


P17页,推荐资源


BlueDavy之技术Blog:OSGi原理与最佳实践http://www.blogjava.net/BlueDavy


P18页,推荐资源


1、Peter Backlund和Patrik Fredriksson提供的领域驱动设计案例讲解

http://www.youtube.com/watch?v=eA8xgdtqqs8

2、Cockburn厨房里的敏捷讨论

http://www.youtube.com/watch?v=XlGHeICHi-s


P19页,推荐资源


Linux基金会启动免费Linux培训网络研讨会:http://training.linuxfoundation.org


P21页,推荐资源


1、W3C官网

索引数据API

http://www.w3.org/TR/2010/WD-IndexedDB-20100105/

2、Computing英国网站

微软利用MySQL的不确定性

http://www.computing.co.uk/computing/news/2255963/redmond-exploits-mysql

3、InfoWorld

新版Groovy语言令Java和SQL开发更惬意

http://www.infoworld.com/d/developer-world/new-version-groovy-cozies-java-sql-242?source=rss_infoworld_news

4、甲骨文官网

甲骨文收购Silver Creek Systems

http://www.oracle.com/us/corporate/press/042861


P23页,推荐资源


《Engines of Creation: An Overview of Game Engines》(文章)链接:http://www.gamasutra.com/view/feature/3832/engines_of_creation_an_overview_.php


P25页,推荐资源


Technology Evaluation Centers:http://cn.technologyevaluation.com/

TEC拥有各类知识库的资料库。


P26页,推荐资源


1. Maxim博客(关注Ruby和Rails开发技术):http://mediumexposure.com/

2.《Getting Up To Speed With Rails 3》(文章):http://darwinweb.net/articles/82


P28页,推荐资源


奉继承:云计算=SaaS+网格计算+虚拟化

http://www.spluss.cn/a/news/2010/0203/1027.html


P29页,推荐资源


重构之美 – Switchable 组件开发心得

作者:玉伯(lifesinger)

链接:http://lifesinger.org/blog/2010/01/the-beauty-of-refactoring/


SafeMessager我的安全信使


P71页,代码段:


这时可以故意引发异常,然后利用adb的logcat来监视错误输出,捕捉有用的信息。


Uri smsUri = Uri.parse(”content://sms”);

Cursor c = getContentResolver().query(smsUri,new String[]{”dummyField”},null,null, null);


上述代码中的”dummyField”就是故意输入的错误字段名,此时logcat中就会出现下述信息:


… no such column: dummyField while compiling: SELECT dummyField FROM sms …


微软云计算平台Azure概述(一)


P110 相关链接:


为了更容易的在本地进行关于Azure的操作,我们需要下载Azure SDK (http://www.microsoft.com/downloads/details.aspx?FamilyID=6967ff37-813e-47c7-b987-889124b43abd&displaylang=en)。


P110 代码段1:


让我们到默认的页面在Page_Load模块里加一些日志。

protected void Page_Load(object sender, EventArgs e)

{

System.Diagnostics.Trace.TraceInformation(”The Default.aspx page had been opened.”);

}


P111 代码段2:


现在来创建一个新的类叫作CommentEntity然后将下面的代码粘贴:


public class CommentEntity : TableServiceEntity

{

public string Content { get; set; }

public string Author { get; set; }

public DateTime CreateOn { get; set; }

public CommentEntity()

: base(DateTime.UtcNow.ToString(”yyyyMMdd”),

string.Format(”{0:10}_{1}”, DateTime.MaxValue.Ticks - DateTime.Now.Ticks, Guid.NewGuid()))

{

}

}


P111 代码段3:


我们添加另外一个名为WhiteboardDataContext的类,用于配置数据上下文和数据源。


{

private CloudStorageAccount _account;

public IQueryable<CommentEntity> Comments

{

get

{

return CreateQuery<CommentEntity>(”Comments”);

}

}

public WhiteboardDataContext(CloudStorageAccount account)

: base(account.TableEndpoint.AbsoluteUri, account.Credentials)

{

_account = account;

var tableStorage = new CloudTableClient(_account.TableEndpoint.AbsoluteUri, _account.Credentials);

if (!tableStorage.DoesTableExist(”Comments”))

{

CloudTableClient.CreateTablesFromModel(typeof(WhiteboardDataContext), _account.TableEndpoint.AbsoluteUri, _account.Credentials);

}

}

public void AddCommentEntity(CommentEntity comment)

{

AddObject(”Comments”, comment);

SaveChanges();

}

}


P111 代码段4:


下面我们来到前端的文件 – Default.aspx然后添加一个文本框,一个添加新评论的按钮,和一个在存储器里显示所有评论的GridView。在后台的代码中,我们创建几个methods:


public partial class _Default : System.Web.UI.Page

{

WhiteboardDataContext _context;

protected void Page_Load(object sender, EventArgs e)

{

_context = new WhiteboardDataContext(CloudStorageAccount.FromConfigurationSetting(”DataConnectionString”));

if (!IsPostBack)

{

BindComments();

}

}

protected void btnPostComment_Click(object sender, EventArgs e)

{

var comment = new CommentEntity()

{

Content = txtNewComment.Text,

CreateOn = DateTime.Now

};

_context.AddCommentEntity(comment);

BindComments();

}

private void BindComments()

{

var comments = _context.Comments.ToList();

gvComments.DataSource = comments;

gvComments.DataBind();

}

}


P112 代码段5:


下一步是为Azure应用程序定义配置读取器。修改OnStart函数,如下面的代码所示:


public override bool OnStart()

{

DiagnosticMonitor.Start(”DiagnosticsConnectionString”);

// For information on handling configuration changes

// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

RoleEnvironment.Changing += RoleEnvironmentChanging;

Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>

{

configSetter(Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue(configName));

});

return base.OnStart();

}


在Java 中使用协程(Coroutine)


P114 代码段1:


一为receive 方式,二为react方式,代码例子如下:


receive{

case MessageObject(args) => doHandle(args)

}

react{

case MessageObject(args) => doHandle(args)

}


P114 代码段2:


下面来看基于Scala Actor 实现并发处理请求的一个简单例子。


class Processor extends Actor{

def act(){

loop{

react{

case command:String => doHandle(command)

}

}

}

def doHandle(command:String){

// 业务逻辑处理

}

}


需要并发执行此Processor 时,在处理时需要的仅为调用以下代码:


val processor=new Processor()

processor.start

processor ! “Hello”


P115 代码段3:


下面来看基于Kilim 实现并发处理请求的一个简单例子。


public class Processor extends Task{

private String command;

public Processor(String command){

this.command=command;

}

public void execute() throws Pausable,Exception{

// 业务逻辑处理

}

}


处理时,仅需调用以下代码:


Task processor=new Processor(command);

processor.start();


P115 代码段4:


一种为通过Future 方式发送消息来实现:


class Processor(command:String) extends Actor{

def act(){

val actor=new NetSenderActor()

val ft=actor !! command

println(ft())

}

}

class NetSenderActor extends Actor{

def act(){

case command:String => {

reply(“received command:”+command)

}

}

}


第二种为通过receive 的方式来实现:


class Processor(command:String) extends Actor{

def act(){

val actor=new NetSenderActor()

actor ! command

var senderResult=””

receive{

case result:String => {

senderResult=result

}

}

println(senderResult)

}

}

class NetSenderActor extends Actor{

def act(){

case command:String => {

sender ! (“received command:”+command)

}

}

}


P115 代码段5:


Kilim 中要实现Task 之间的同步调用非常简单,代码如下:


public class TaskA extends Task{

public void execute() throws Pausable,Exception{

Mailbox<Object> result=new Mailbox<Object>();

Task task=new TaskB(result);

task.start();

Object resultObject=result.get();

System.out.println(resultObject);

}

}

public class TaskB extends Task{

private Mailbox<Object> result;

public TaskB(Mailbox<Object> result){

this.result=result;

}

public void execute() throws Pausable,Exception{

result.put(“result from TaskB”);

}

}


《特性检测不等于浏览器检测》


P117 代码段1:


因此,这样的代码是不好的:


if (navigator.userAgent.indexOf(”MSIE 7″) > -1){

//do something

}

应该这样写:

if(document.all){

//do something

}


P117 代码段2:


例如,在DOM还未成熟的时候,并非所有浏览器都支持getElementById(),所以我们常常见到这样的代码:


if(document.getElementById){  //DOM

element = document.getElementById(id);

} else if (document.all) {  //IE

element = document.all[id];

} else if (document.layers){  //Netscape < 6

element = document.layers[id];

}


P117 代码段3:


我们开始看到这样的代码:


//AVOID!!!

if (document.all) {  //IE

id = document.uniqueID;

}

else {

id = Math.random();

}


P117 代码段4:


更进一步,人们开始将下面的代码:


varisIE = navigator.userAgent.indexOf(”MSIE”) > -1;

替换成:

varisIE = !!document.all;


……


又不知道了什么时候,开发者们发现document.all实际上并不是检测IE浏览器的最佳指征,于是又出现了这样的代码:


varisIE = !!document.all&&document.uniqueID;


P118 代码段5:


下面的代码片段撷取自MooTools 1.1.2(注,目前最新版本是1.1.4,代码已经有所不同):


//取自MooTools 1.1.2

if (window.ActiveXObject) window.ie = window[window.XMLHttpRequest ? 'ie7' : 'ie6'] = true;

else if (document.childNodes&& !document.all&& !navigator.taintEnabled) window.webkit = window[window.xpath ? 'webkit420' : 'webkit419'] = true;

else if (document.getBoxObjectFor != null || window.mozInnerScreenX != null) window.gecko = true;


P118 代码段5:


我好奇地发现,在MooTools 1.2.4中仍然存在依赖于getBoxObjectFor()的基于特性的浏览器检测:


//取自MooTools 1.2.4

var Browser = $merge({

Engine: {name: ’unknown’, version: 0},

Platform: {name: (window.orientation != undefined) ? ’ipod’ : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},

Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},

Plugins: {},

Engines: {

presto: function(){

return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));

},

trident: function(){

return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);

},

webkit: function(){

return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);

},

gecko: function(){

return (!document.getBoxObjectFor&&window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);

}

}

}, Browser || {});


《Linux内核调试新秀——SystemTap


P127 代码段1:


看看SystemTap是怎么做的吧:


#!/usr/bin/stap -v

probe kernel.function(”sys_open”) {

if (task_execname(task_current()) == ”Xorg”) {

printf(”open %s\n”, user_string($filename));

}

}


P127 代码段2:


下面的例子展示了内嵌C语言的用法,其中位于%{}%之间的代码块为内嵌C语言


#! /usr/bin/env stap

%{

#include <linux/netdevice.h>

#include <linux/skbuff.h>

#include <linux/string.h>

%}

function getname:string(field:long) %{

struct sk_buff *skb;

struct net_device *dev;

int p;

char *name;

char buf[MAXSTRINGLEN];

p = (int)(THIS->field);

skb = (struct sk_buff *)p;

dev = (struct net_device *)(skb->dev);

name = (char*)(dev->name);

sprintf(buf, ”receive: dev: %s length: %d\n”, name, skb->len);

strlcpy (THIS->__retvalue, buf, MAXSTRINGLEN);

%}

probe kernel.function(”netif_rx”) {

printf(”%s\n”, getname($skb));

}

probe kernel.function(”netif_receive_skb”) {

printf(”%s\n”, getname($skb));

}


如有需要请下载Word版本:2010年03期《程序员》配套源码及相关链接


One Response to “2010年03期《程序员》配套源码及相关链接”

  1. G_cofa 说:

    东西还蛮好的,看看啦。

请评论

preload preload preload
京ICP备06065162